Express – 返回二进制数据

我试图用Express来返回一些二进制数据。 在这个例子中,这是一个PDF,但在理论上,这可以是任何types的文件。

但关注目前的pdf。 我写了这个代码:

app.get('*', function (req, res) { getBinaryData(req.url, function (answer) { res.type('pdf'); res.end(new Buffer(answer, 'binary')); }, function (error) { res.setHeader('Content-Type', 'text/plain'); return res.end(error); } ); }); 

根据我在这里看到的: https : //github.com/strongloop/express/issues/1555

但是,我得到一个PDF文件的正确数量的页面,正确的标题….但所有的网页是空白的

我确信关心返回的getBinaryData(),因为这个函数问外部Web服务,当我直接问这个服务,我得到正确的文件。

预先感谢您的回答

这里是我稍微清理了如何使用Express返回二进制文件的版本。 我假设数据是在一个对象,可以声明为二进制,并有一个长度:

 exports.download = function (data, filename, mimetype, res) { res.writeHead(200, { 'Content-Type': mimetype, 'Content-disposition': 'attachment;filename=' + filename, 'Content-Length': data.length }); res.end(new Buffer(data, 'binary')); }; 

我发现一个更简单的解决scheme:

 request(req.url).pipe(res); 

这将来自远程Web服务的原始响应直接传递给我的响应! 无论文件types如何,我都得到了正确的文件。