2 回答
TA贡献1873条经验 获得超9个赞
您的应用程序的后端是什么?我在 C# (.NET Core) 中使用它来获取文件的内容类型,然后将其设置为响应中的标头:
public string GetContentType (string filePath) {
var contentTypeProvider = new FileExtensionContentTypeProvider();
string contentType;
if( !contentTypeProvider.TryGetContentType( filePath, out contentType ) ) {
contentType = "application/octet-stream";
};
return contentType;
}
编辑:修改 OP 代码以动态处理内容类型:
var headers = response.headers;
var responseType = headers['content-type'];
var fileType = "text/plain";
var fileName = "report.txt";
if ( responseType == "application/octet-stream" ) {
fileType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
fileName = "report.xlsx";
}
var blob = new Blob([response.data], {
type: fileType
});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
link.click();
TA贡献1828条经验 获得超4个赞
您可以使用标题的内容类型获取文件扩展名。
使用这个 Javascript 库 - node-mime
您只想传递您的headers['content-type'],它将为您提供需要为下载名称设置的文件扩展名。
var ctype = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
console.log(mime.getExtension(ctype));
<script src="https://wzrd.in/standalone/mime@latest"></script>
示例:在您的情况下,
var headers = response.headers;
var blob = new Blob([response.data], {
type: headers['content-type']
});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "report." + mime.getExtension(headers['content-type']);
link.click();
Mozilla 开发人员提供的 MIME 类型列表不完整。
添加回答
举报