Javascript 通过jQuery提供的文件被解释为txt/blob,而不是正确的文件类型

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 (

我正在运行一个AJAX脚本来提供不同类型的文件(.txt/.msg,但也提供图像和PDF)。简而言之,窗口弹出,检索文件,再次关闭,非常基本:

$(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类型的列表:。。。也许这对其他人有用。