如何将javascript缓冲区作为文件从node.js服务器发送

如何将javascript缓冲区作为文件从node.js服务器发送,javascript,node.js,xmlhttprequest,download,buffer,Javascript,Node.js,Xmlhttprequest,Download,Buffer,我有一个带有javascript脚本的html网页,它使用XMLHttpRequest从服务器获取文件。我想要一个浏览器来打开一个标准的“下载文件”窗口,这样用户就可以保存文件了。 代码很简单: var xhr; xhr=new XMLHttpRequest(); xhr.onreadystatechange=function() { if (xhr.readyState==4 && xhr.status==200) { alert("File succ

我有一个带有javascript脚本的html网页,它使用XMLHttpRequest从服务器获取文件。我想要一个浏览器来打开一个标准的“下载文件”窗口,这样用户就可以保存文件了。 代码很简单:

var xhr;
xhr=new XMLHttpRequest();

xhr.onreadystatechange=function()
  {
  if (xhr.readyState==4 && xhr.status==200)
    {
    alert("File successfully received");
    }
  } 
xhr.open("GET”,”http://localhost:17001/filedl?param=1",true);
xhr.send();
在服务器上,我有一个正在运行的node.js应用程序和express模块。 应用程序正在生成缓冲区数据并将其作为文件发送回客户端。 代码如下:

var express = require('express');
var app = express();

app.get('/filedl', function(req, res){
  var pngBuffer = new Buffer("generated png goes here");
  res.setHeader('Content-Description','File Transfer');
  res.setHeader('Content-Disposition', 'attachment; filename=print.png');
  res.setHeader('Content-Type', 'application/octet-stream');
  res.end(pngBuffer);
});
app.listen(17001);
但是,我无法在浏览器中打开“另存为”对话框。我只是从我的服务器得到一个文本形式的缓冲区响应

我尝试过设置不同的响应http头,但没有成功

var blobObject = new Blob([xhr.respomse], {type: 'image/png'}); 
navigator.msSaveBlob(blobObject, "print.png");
blobObject.msClose();

我正在客户端使用navigator.msSaveBlob函数在Internet Explorer中保存文件,希望对您有用

我正在寻找一种将发送的数据保存为文件的通用方法。我想我必须添加或更改一些响应标题,以便在任何浏览器中调用“保存文件”对话框。我相信这项任务可以在没有IE10特定javascript方法的情况下解决。最简单的方法就是创建一个隐藏的iframe元素,以下载文件为目标。如果你在收到数据后不需要处理数据,你可以试试。如果你把ms前缀改成webkit或moz,我相信它也可以在其他浏览器上使用。