所以我调用了一个API,它将一个文件返回给我的Angular,如下所示:
getFile(fileInformation) {
const req = new HttpRequest('POST', 'filedownload', fileInformation, { reportProgress: true, responseType: "blob" });
return this.http.request(req);
}
在API Controller中(我跟随this SO top answer完成了这一步):
Public Function GetFile(fileInformation As FileDto) As HttpResponseMessage
Dim filePath = Path.Combine(FileConstants.FilePath, fileInformation.FileType, fileInformation.FileName)
Dim fileStream = New FileStream(filePath, FileMode.Open, FileAccess.Read)
Dim result = new HttpResponseMessage(HttpStatusCode.OK)
result.Content = New StreamContent(fileStream)
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream")
Return result
End Function
此调用返回的结果为HttpResponse
,body类型为Blob
。
HttpResponse: {
blob: {
size: 289940,
type: "application/octet-stream"
},
headers: ...,
status: 200,
...
}
现在如何在接收响应的Angular组件中触发此文件的下载?
发布于 2017-10-28 03:16:01
npm install --save file-saver
将其导入到拥有blob实例的类中
import * as FileSaver from 'file-saver';
那就打电话给我
FileSaver.saveAs(blob, fileName);
发布于 2021-04-16 20:02:21
正如@Jason Spradlin指出的那样,你可以使用FileSaver包
save file还有另一个包:
npm install @progress/kendo-file-saver --save
使用:
import { saveAs } from '@progress/kendo-file-saver'
saveAs(data: string | Blob, fileName: string, options?: SaveOptions)
1-数据为base64
const result = `data:${YOUR_MIME_TYPE};base64,` + YOUR_DATA;
saveAs(result, YOUR_FILE_NAME);
2-数据为Blob
saveAs(YOUR_DATA, YOUR_FILE_NAME);
手动
const file = new window.Blob([data], { type: contentType });
const downloadAncher = document.createElement("a");
downloadAncher.style.display = "none";
const fileURL = URL.createObjectURL(file);
downloadAncher.href = fileURL;
downloadAncher.download = fileName;
downloadAncher.click();
https://stackoverflow.com/questions/46981818
复制相似问题