我是一名有用的助手,可以为您翻译文本。
我有一个带有ASP.NET Web API的Angular应用程序。
我想要下载存储在服务器上的文件。目前,这是我拥有的代码:
非常感谢。
编辑:
正如@CodeCaster所指出的那样,重定向到URL可能有效,但是我的URL受到保护,只有连接的用户才能下载文件。
我有一个带有ASP.NET Web API的Angular应用程序。
我想要下载存储在服务器上的文件。目前,这是我拥有的代码:
[HttpGet]
[Route("downloadFile")]
[JwtAuthentication] //Only a connected user can download the file
public async Task<HttpResponseMessage> DownloadFile(string path)
{
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
var fileStream = File.OpenRead(path);
result.Content = new StreamContent(fileStream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentLength = fileStream.Length;
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = fileStream.Name,
Size = fileStream.Length
};
return result;
}
而在我的Angular代码中:
// file-navigation.service.ts
downloadFile(file: FileElement) {
const data = { path: this.formatPath(true) + file.name };
return this.http.get(this.apiUrl + '/downloadFile', { params: data, responseType: 'blob' });
}
// file-navigation.component.ts
this.fileNavigationService.downloadFile(element).subscribe(result => {
this.generateDownload(element, result, false);
});
generateDownload(element: FileElement, blob: Blob, isArchive: boolean) {
const fileName = element != null ? element.name : 'Archive';
if (navigator.appVersion.toString().indexOf('.NET') > 0) {
window.navigator.msSaveBlob(blob, fileName + (isArchive ? '.zip' : ''));
} else {
const link = document.createElementNS(
'http://www.w3.org/1999/xhtml',
'a'
);
(link as any).href = URL.createObjectURL(blob);
(link as any).download = fileName + (isArchive ? '.zip' : '');
document.body.appendChild(link);
link.click();
setTimeout(function () {
document.body.removeChild(link);
link.remove();
}, 100);
}
}
我成功地从服务器下载了一个文件。
然而,在Chrome浏览器中,下载进度条只会在下载完成后出现。因此,如果文件太大,用户将无法得到任何指示,表明他的文件正在下载中。
下面是一个正在下载16MB文件的截图。服务器正在发送数据,但下载进度条没有出现。
一旦下载完成,文件将出现在屏幕底部的下载栏中。 我该如何将文件发送到浏览器,以便向用户显示此指示器?非常感谢。
编辑:
正如@CodeCaster所指出的那样,重定向到URL可能有效,但是我的URL受到保护,只有连接的用户才能下载文件。