为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

30秒到达战场 2021-11-12 15:26:21
问题是 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。我如何从内容类型做到这一点?
查看完整描述

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();


查看完整回答
反对 回复 2021-11-12
?
明月笑刀无情

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 类型列表不完整。


查看完整回答
反对 回复 2021-11-12
  • 2 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信