косвенная ссылка для скачивания с использованием webApi и angularjs - PullRequest
0 голосов
/ 18 марта 2020

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

Код WebApi:

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;

AngularJs Код:

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-код и данные получены, но браузер не отображает диалоговое окно для начала загрузки.

Можете ли вы мне помочь?

1 Ответ

0 голосов
/ 18 марта 2020

Вы можете использовать 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]);
...