J'essaie de renvoyer des données binaires avec Express. Dans l'exemple, c'est un PDF mais théoriquement, cela peut être n'importe quelle sorte de fichier.
Mais concentrez-vous sur le pdf pour le moment. J'ai écrit ce code:
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);
}
);
});
Basé sur ce que j'ai vu ici: https://github.com/strongloop/express/issues/1555
Mais, j'obtiens un fichier pdf avec le bon nombre de pages, le bon titre .... mais toutes les pages sont vierges
Je suis sûr qu'il s'agit du retour de getBinaryData (), car cette fonction a demandé un service Web externe et quand j'ai demandé directement ce service, j'ai obtenu le bon document.
Merci d'avance pour vos réponses
J'ai trouvé une solution plus simple:
request(req.url).pipe(res);
Cela redirige la réponse d'origine d'un service Web distant directement vers ma réponse! J'ai obtenu le bon fichier quel que soit le type de fichier.
Voici ma version légèrement nettoyée de la façon de retourner des fichiers binaires avec Express. Je suppose que les données sont dans un objet qui peut être déclaré binaire et a une longueur:
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'));
};