我有一个控制器.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);
}
}