猿问

如何从内容类型获取 MIME 类型

问题是 axios 调用返回文件。有时是 xlsx,有时是纯 txt。


在javascript中,一旦我得到它们,我就强制通过blob下载它。


像这样的东西:


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.xlsx";

link.click();

正如你看到的,我有这样的事情:link.download = "report.xlsx"。我想要的是用动态 mime 类型替换xlsx,以便有时是report.txt,有时是report.xlsx。


我如何从内容类型做到这一点?


30秒到达战场
浏览 113回答 2
2回答

眼眸繁星

您的应用程序的后端是什么?我在 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();

明月笑刀无情

您可以使用标题的内容类型获取文件扩展名。使用这个 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], {&nbsp; &nbsp; 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 类型列表不完整。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答