Javascript 通过jQuery提供的文件被解释为txt/blob,而不是正确的文件类型
我正在运行一个AJAX脚本来提供不同类型的文件(.txt/.msg,但也提供图像和PDF)。简而言之,窗口弹出,检索文件,再次关闭,非常基本:Javascript 通过jQuery提供的文件被解释为txt/blob,而不是正确的文件类型,javascript,jquery,browser,xmlhttprequest,blob,Javascript,Jquery,Browser,Xmlhttprequest,Blob,我正在运行一个AJAX脚本来提供不同类型的文件(.txt/.msg,但也提供图像和PDF)。简而言之,窗口弹出,检索文件,再次关闭,非常基本: $(function(){ $.ajax({ url: '../myUrl/myFile.msg', method: 'GET', xhrFields: { responseType: 'blob' }, success: function (
$(function(){
$.ajax({
url: '../myUrl/myFile.msg',
method: 'GET',
xhrFields: {
responseType: 'blob'
},
success: function (data) {
var a = document.createElement('a');
document.body.appendChild(a);
var url = window.URL.createObjectURL(data);
a.href = url;
a.download = 'myFile.msg';
a.click();
a.target='_self';
setTimeout(function(){
window.URL.revokeObjectURL(url);
window.close();
}, 500);
}
});
});
我的问题是,通过此函数提供的.msg文件(由MS Outlook创建)被视为blob://resources——因此,如果我们的(懒惰的)用户希望立即通过firefox打开他们的.msg文件,他们的文本编辑器将打开,并且他们会收到大量编码字符串垃圾
我不确定这是否是Outlook/.msg特定的问题,我也不确定这是否只是Firefox的问题(Chrome只是下载文件)
有没有办法让浏览器知道,发送的文件是一个.msg文件,应该由Outlook处理,而不是由文本编辑器处理 通过覆盖xhr内容类型,您应该能够触发正确的应用程序打开。尝试将此添加到ajax调用中:
beforeSend: function(xhr) {
xhr.overrideMimeType('application/vnd.ms-outlook');
}
实际上(在Firefox中)所有这些似乎都是删除假定的默认xml类型,并使用文件扩展名来确定要使用哪个应用程序。因此,您也可以在覆盖中使用
application/*
,甚至只使用*
。这就解决了问题-非常感谢。我在这里找到了MIME类型的列表:。。。也许这对其他人有用。