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