Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/45.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Express-从webservice返回二进制数据_Node.js_Pdf_Express_Binary - Fatal编程技术网

Node.js Express-从webservice返回二进制数据

Node.js Express-从webservice返回二进制数据,node.js,pdf,express,binary,Node.js,Pdf,Express,Binary,我尝试用Express返回一些二进制数据。在本例中,它是一个PDF文件,但理论上,它可以是任何类型的文件 但现在请关注pdf。我写了这段代码: app.get('*', function (req, res) { getBinaryData(req.url, function (answer) { res.type('pdf'); res.end(new Buffer(answer, 'binary'));

我尝试用Express返回一些二进制数据。在本例中,它是一个PDF文件,但理论上,它可以是任何类型的文件

但现在请关注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);
        }
    );
});
根据我在这里看到的情况:

但是,我得到了一个有正确页数、正确标题的pdf文件。。。。但是所有的页面都是空白的

我肯定关心getBinaryData()的返回,因为这个函数询问了一个外部Web服务,当我直接询问这个服务时,我得到了正确的文档


提前感谢您的回答

我找到了一个更简单的解决方案:

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

这将原始响应从远程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(Buffer.from(data, 'binary'));
};

为什么不使用
res.sendFile
方法?因为我没有该文件:我从另一个Web服务获取此二进制内容。最终,我可以创建一个临时文件并使用sendFile…我尝试了同样的方法,但它对我不起作用。request(req.url).pipe(res)的request lib驻留在哪个库中?轻微的输入错误。应该是:
res.end(new Buffer(data),'binary')
请记住new Buffer()已弃用,并且存在安全问题。@realtebo您可以使用Buffer.from()-有关更多示例,请参阅Node.js文档。
new Buffer()
已弃用,请改用
Buffer.from()
为什么要使用Buffer.from,这不是为字符串保留的吗?你不需要使用Buffer.alloc吗?