获取文件作为AJAX的回复?

时间:2016-01-01 01:29:59

标签: javascript jquery ajax node.js

我有一个通用的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转换为具有适当扩展名的文件,然后提示浏览器保存它们?

有任何建议或其他解决方法吗?

1 个答案:

答案 0 :(得分:2)

尝试使用FileReaderBloba元素,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]));
    });      
})