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);
}
);
});
私がここで見たものに基づいて: https://github.com/strongloop/express/issues/1555
しかし、正しいページ数、正しいタイトルのPDFファイルを取得します...しかし、すべてのページが空白です
この関数は外部Webサービスを要求し、このサービスを直接要求したときに適切なドキュメントを取得したため、getBinaryData()が返されることを心配しています。
回答ありがとうございます
私はより簡単な解決策を見つけました:
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'));
};