Node js Преобразование pdf-буфера обратно в pdf

avatar
dram
8 апреля 2018 в 21:01
20397
1
10

Я создал PDF-файл с помощью браузера на Javascript и отправил его по почте на сервер, используя этот код:

var blob = pdf.output('blob')
var xhr = new XMLHttpRequest();
xhr.open('post','/upload', true);
xhr.setRequestHeader("Content-Type", "application/pdf");                                
xhr.send(blob);

Я хочу сохранить файл в формате pdf на сервере, на котором работает Node с помощью Express. Я придумал следующий код, используя экспресс-пакет и пакет body-parser:

const bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ limit: '1gb', extended: false }));
app.use(bodyParser.raw({ limit: '1gb', type: 'application/pdf' }));

app.post('/upload', function(req, res){
   console.log(req.body);      
}

req.body — это буфер, Uint8Array[653120]:

Мне нужна помощь, чтобы преобразовать его обратно в pdf перед сохранением на сервере. Любая помощь будет оценена по достоинству. Спасибо.

Источник

Ответы (1)

avatar
Catalyst
8 апреля 2018 в 21:05
7

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

например. попробовать fs.writeFileSync('some.pdf', req.body)

На самом деле я не рекомендую использовать writeFileSync — вместо этого используйте writeFile, который является асинхронным и требует обратного вызова, но не блокирует прием других http-запросов.

Буфер — это просто последовательность байтов без какой-либо кодировки. Если вы ожидаете, что при выходе из системы тело будет выглядеть как xml, попробуйте на нем .toString('utf8'). hex/utf8/base64 - это просто представления двоичного кода. Они похожи на функцию для распаковки или упаковки данных. В этом случае вы хотите, чтобы последовательность байтов в вашем буфере существовала на диске как есть; так что возиться с кодировкой нежелательно.