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



我有html网页,javascript脚本使用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();

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

最新更新