Node.js - 将二进制数据直接从请求流式传输到远程服务器
Node.js - Stream Binary Data Straight from Request to Remote server
我一直在尝试将二进制数据(PDF、图像、其他资源)直接从请求流式传输到远程服务器,但到目前为止还没有成功。明确地说,我不想将文档写入任何文件系统。客户端(浏览器)将向我的节点进程发出请求,该进程随后将向远程服务器发出 GET
请求,并将该数据直接流式传输回客户端。
var request = require('request');
app.get('/message/:id', function(req, res) {
// db call for specific id, etc.
var options = {
url: 'https://example.com/document.pdf',
encoding: null
};
// First try - unsuccessful
request(options).pipe(res);
// Second try - unsuccessful
request(options, function (err, response, body) {
var binaryData = body.toString('binary');
res.header('content-type', 'application/pdf');
res.send(binaryData);
});
});
将数据和 binaryData
都放在 console.log
中表明正确的数据在那里,但随后下载的 PDF 已损坏。我不明白为什么。
哇,没关系。发现 Postman(Chrome App)以某种方式劫持了请求和响应。我的代码摘录中的 // First Try
示例在浏览器中正常工作。
我一直在尝试将二进制数据(PDF、图像、其他资源)直接从请求流式传输到远程服务器,但到目前为止还没有成功。明确地说,我不想将文档写入任何文件系统。客户端(浏览器)将向我的节点进程发出请求,该进程随后将向远程服务器发出 GET
请求,并将该数据直接流式传输回客户端。
var request = require('request');
app.get('/message/:id', function(req, res) {
// db call for specific id, etc.
var options = {
url: 'https://example.com/document.pdf',
encoding: null
};
// First try - unsuccessful
request(options).pipe(res);
// Second try - unsuccessful
request(options, function (err, response, body) {
var binaryData = body.toString('binary');
res.header('content-type', 'application/pdf');
res.send(binaryData);
});
});
将数据和 binaryData
都放在 console.log
中表明正确的数据在那里,但随后下载的 PDF 已损坏。我不明白为什么。
哇,没关系。发现 Postman(Chrome App)以某种方式劫持了请求和响应。我的代码摘录中的 // First Try
示例在浏览器中正常工作。