使用webApi和angularjs的间接下载链接

问题描述 投票:0回答:1

我使用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代码和收到的数据,但浏览器未显示任何对话框以开始下载。

您能帮我吗?

c# angularjs asp.net-web-api asp.net-web-api2 httpresponsemessage
1个回答
0
投票

您可以使用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]);
© www.soinside.com 2019 - 2024. All rights reserved.