使用javascript下载MVC文件



我有一个控制器.cs它返回文件,如下所示:

return File(file, "application/xml");

最终将文件返回到我的 js 中,如下所示:

.then(function (file) {
      window.open(uri, '_blank');
      downloadFile(file);
 });

window.open 在我的浏览器中显示 xml 文件,但我想下载它附带的文件。

尝试了许多解决方案来使其工作,但该文件似乎不是我期望的。

我试过这些:

1.

function objToString(obj) {
    var str = '';
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            str += p + '::' + obj[p] + 'n';
        }
    }
    return str;
}
console.log(objToString(file));
//Output:
0::<
1::?
2::x
3::m
4::l
5:: 
6::v
7::e
8::r
9::s
10::i
11::o
etc..

阿拉伯数字:

console.log(file.toJSON());
//output:
Object(13799) [ "<", "?", "x", "m", "l", " ", "v", "e", "r", "s", … ]

3.

console.log(file.toString());
//output:
[object Object]

4.

console.log(JSON.stringify(file));
//output:
{"0":"<","1":"?","2":"x","3":"m","4":"l","5":" ","6":"v","7":"e","8":"r","9":"s","10":"i","11":"o","12":"n","13":"=","14":""","15":"1","16":".","17":"0","18":""","19":" ","20":"e","21":"n","etc..

我想使用此方法下载:

if (window.navigator && window.navigator.msSaveBlob) {
    e.preventDefault();
    navigator.msSaveBlob(new Blob([file], { type: 'application/xml' }), "file.xml")
}
else {
    var link = document.createElement("a");
    link.download = "file.xml";
    link.href = "data:application/xml," + encodeURIComponent(file);
    link.click();
}

我能做些什么来让它工作?如何解析文件?

有一个解决方案在工作:

function download(file) {
var blob = new Blob([new Uint8Array(file.data)], { type: 'application/xml' });
var name = 'Infopath.xml';
if (window.navigator.msSaveOrOpenBlob) { // for IE 11 en Edge
    window.navigator.msSaveBlob(blob, name);
}
else //Other browsers
{
    var URL = window.URL || window.MozURL || window.webkitURL || window.MSURL || window.OURL;
    var anchor = document.createElement('a');
    anchor.href = URL.createObjectURL(blob);
    anchor.download = name;
    document.body.appendChild(anchor);
    anchor.target = '_blank';
    anchor.click();
    document.body.removeChild(anchor);
   }
}

最新更新