Скачать файл с blob из asp.net mvc

Я хочу загрузить Excel со своего контроллера angular с помощью blob.

код сервера приложения mvc

    [HttpGet]    
    public HttpResponseMessage Download(SearchModel search){
        string fileName = "test.xls"

        byte[] file = GetFile(search)
        HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK)

        HttpResponseMessage httpResponseMessage = new HttpResponseMessage();                    
        httpResponseMessage.Content = new ByteArrayContent(file.ToArray());                    
        httpResponseMessage.Content.Headers.Add("x-filename", fileName);                    
        httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");                    
        httpResponseMessage.Content.Headers.ContentDisposition = new    ContentDispositionHeaderValue("attachment");                    
        httpResponseMessage.Content.Headers.ContentDisposition.FileName = fileName;                    

        return httpResponseMessage;   
    }    

и js

$http({ method: 'GET', url: 'Download', params: {...some params}, responseType: 'arrayBuffer' })
    .success(function (data, status, headers) {

        headers = headers();
        var filename = headers['x-filename'];
        var contentType = headers['content-type'];
        var linkElement = document.createElement('a');
        try {
            if (window.navigator && window.navigator.msSaveOrOpenBlob) {
                window.navigator.msSaveOrOpenBlob(new Blob([data],{type: "application/octet-stream"}));
                return;
            }

            var a = $("<a style='display: none;'/>");
            var url = window.URL.createObjectURL(new Blob([data], {type: "application/octet-stream"}));
            a.attr("href", url);
            a.attr("download", "name");
            $("body").append(a);
            a[0].click();
            window.URL.revokeObjectURL(url);
            a.remove();
        }
        catch (ex) {
            console.info(ex);
        }
    })
    .error(function () {  });     

но есть некоторые проблемы:

  1. имя файла на стороне javascript не определено, а не test.xls, как на стороне сервера
  2. contentType - это «text / html; charset = utf-8», а не «application / octet-stream», как на стороне сервера.
  3. файл, который загружается, это
StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content:  System.Net.Http.ByteArrayContent, Headers:
{
  x-filename: test.pdf
  Content-Type: application/octet-stream
  Content-Disposition: attachment; filename=test.pdf
}

Файл представляет собой JSON с информацией заголовка. Почему этот файл неправильный?

Это означает, что ваш контроллер - это не asp.net web api, а обычный asp.net mvc (поэтому наследуется от Controller, а не от ApiController).

Evk 30.03.2018 11:02

Вы должны разместить здесь свой "мой компьютер"

badboy24 30.03.2018 11:26

Спасибо @Evk. Это проблема. Я решил использовать FileResult.

user3401335 03.04.2018 09:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
1 138
0

Другие вопросы по теме