从快速路线下载图像

时间:2017-01-26 15:07:10

标签: javascript node.js html5 rest express

我有一个使用以下路由运行的快速服务器:

let req = request.get('/users/' + userId + '/files/' + file.name);
req.set('Authorization', 'Bearer ' + this.state.jsonWebToken);
req.end((err, resp) => {
  let f = new File([resp.text], file.name, {type: resp.type});
  fileSaver.saveAs(f);
});

在我的网络应用中,我正在调用此路线并尝试使用file-saver在本地保存文件:

wp_enqueue_script()

如果文件是纯文本,那么它可以正常工作,但对于像图像这样的其他文件类型我无法打开文件(它已经“损坏”)。

这就是响应的样子:

screenshot

我是否需要先以某种方式解码数据?保存文件内容的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

我很久以前没有使用过快递,而且我在手机上打字,这似乎是一个编码问题,所以看起来你似乎是一个问题。发送原始图像,你需要在base64中编码,尝试类似:

//Here your saved file needs to be encoded to base 64.
var img = new Buffer(data, 'base64');

   res.writeHead(200, {
     'Content-Type': 'image/png',
     'Content-Length': img.length
   });
   res.end(img);

数据是您保存的图像的位置,如果您可以渲染图像,只需添加标题以供下载或链接方法下载。

答案 1 :(得分:1)

如果您使用superagent来执行请求,则可以将响应类型明确设置为"blob",这样可以防止任何尝试解码响应数据。二进制数据将以resp.body

结尾
req.responseType('blob').end((err, resp) => {
  saveAs(resp.body, file.name);
});

答案 2 :(得分:1)

如果您想在页面中将图像作为附件下载,可以使用res

exports.getUserFile = function (req, resp) {
  let filePath = path.join(__dirname, 'storage', req.params.fileName);
  var check = fs.readFileSync(__dirname+req.params.fileName);
  resp.attachment(req.params.fileName); // The name of the file to be saved as. Eg Picture.jpg
  res.resp(check)  // Image buffer read from the path.
});
}

参考:

http://expressjs.com/en/api.html#res.attachment

http://expressjs.com/en/api.html#res.end

希望这有帮助。