Подтвердить что ты не робот

Express - возвращает двоичные данные из удаленного webservice

Я пытаюсь вернуть некоторые двоичные данные в 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 файл с нужным количеством страниц, правый заголовок.... но все страницы пустые

Я уверен, что касается возврата getBinaryData(), потому что эта функция запрашивала внешнюю веб-службу, и когда я прямо спросил эту службу, я получил правильный документ.

Заранее благодарю за ваши ответы

4b9b3361

Ответ 1

Я нашел более простое решение:

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

Это ответ на исходный ответ от удаленного веб-сервиса непосредственно на мой ответ! Я получил правильный файл независимо от типа файла.

Ответ 2

Вот моя слегка исправленная версия того, как вернуть двоичные файлы с помощью 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'));
};