我有一个通用的Ajax调用例程,用于调用node.js中的函数。此函数从服务器读取文件(主要是xls),然后将其流回客户端。
这是我在Node.js(服务器端)中的实现:
// FILE DOESNT EXISTS BEFORE,
// FILE IS CREATED HERE THEN SAVED IN SERVER AS A FILE
fs.readFile("/path/to/file.xlsx", function(err, file){
res.setHeader('Content-Type', 'audio/mpeg');
res.setHeader('Content-Disposition', 'attachment; filename=file.xlsx');
res.write(file, 'binary');
res.end();
});
这是我使用的ajax调用。
$('#submit').click(function()
{
$.ajax({
url: '/',
type:'POST',
data: data,
dataType: 'json',
}).done(function(data) {
console.log(data);
});
})
我成功地在我的控制台(console.log(data)
)中打印了二进制数据。我的问题是如何将此data
转换为具有适当扩展名的文件,然后提示浏览器保存它们?
有任何建议或其他解决方法吗?
答案 0 :(得分:2)
尝试使用FileReader
,Blob
,a
元素,download
属性
$('#submit').click(function() {
$.ajax({
url: '/',
type:'POST',
data: data,
dataType: 'json',
}).done(function(data) {
console.log(data);
var reader = new FileReader();
reader.onload = function(e) {
$("a").attr({"href": e.target.result, "download":"filename"})
.get().click()
}
reader.readAsDataURL(new Blob([data]));
});
})