косвенная ссылка для скачивания с использованием webApi и angularjs

Я использую Web Api (C#) для создания косвенной ссылки для скачивания, используя следующие коды:

Код вебапи:

var file = new FileStream(filePath, FileMode.Open, FileAccess.Read);
var httpResponseMessage = new HttpResponseMessage
  {
    StatusCode = HttpStatusCode.OK,
    Content = new StreamContent(file)
  };
httpResponseMessage.Content.Headers.Add("x-filename", fileName);
httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
httpResponseMessage.Content.Headers.ContentDisposition = 
           new ContentDispositionHeaderValue("attachment") { FileName = fileName };
return httpResponseMessage;

Угловой код:

var response = mainService.DownloadFile('api/download/file?id=1'); // $http get
response.then(function (resp) {
                        // Do Nothing                      
}, function (err) {
        console.log(err.message);
});

Когда в системе установлен менеджер загрузок (аналог IDM) все работает нормально.

но без менеджера загрузки Браузер не показывает диалог загрузки. Ни в Chrome, ни в FireFox

Я проверил вкладку «Сеть» в «Проверить элемент». Мой запрос вернул 200 http-код и полученные данные, но браузер не показывает никакого диалога для начала загрузки.

Вы можете помочь мне?


person Amin reza Abedi    schedule 17.03.2020    source источник


Ответы (1)


Вы можете использовать use angular-file-saver.

 response.then(function (resp) {
      var data = new Blob([resp], { type: 'text/plain;charset=utf-8' });
      FileSaver.saveAs(data, 'filename');                    
    }, function (err) {
            console.log(err.message);
    })

angular
  .module('fileSaverExample', ['ngFileSaver'])
  .controller('ExampleCtrl', ['FileSaver', 'Blob', ExampleCtrl]);
person Ranga Dewasinghe    schedule 18.03.2020