Загрузка данных буфера из базы данных в формате PDF - PullRequest
2 голосов
/ 01 августа 2020

Я разрабатываю веб-приложение, в котором пользователь может загрузить файл PDF, а затем получить его и просмотреть. Что я делал для этого, так это то, что PDF-файл загружался в базу данных PostgreSQL как тип данных bytea (столбец называется «вложением»), а затем, когда nodeJS предлагал эти данные для получения и преобразования обратно в PDF-файл для просмотра.

Однако я изо всех сил пытался преобразовать данные обратно в действительный PDF-файл. Это метод, который я использую до сих пор.

var file = new Blob([res[i].attachment], { type: 'application/pdf' });
var fileURL = URL.createObjectURL(file);
document.getElementById("pdf_box").data = fileURL;

Идентификатор #pdf_box относится к элементу объекта в файле HTML, который используется для отображения PDF (было показано, что он работает, когда я укажите местоположение файла фиктивного PDF-файла для атрибута data этого элемента).

Также показано, что файл res [i] .attachment предоставляет допустимые данные буфера в формате JSON, с примером, приведенным ниже :

"attachment":{"type":"Buffer","data":[91,111,98,106,101,99,116,32,70,105,108,101,93]}

Однако, когда я загружаю созданный fileURL в атрибут данных #pdf_box, я получаю сообщение об ошибке, указывающее в строках недопустимого файла PDF. Мои исследования до сих пор показывают, что это может быть связано с тем, что данные поступают в виде буфера, тогда как они должны быть в байтовой форме, но я не нашел ничего, что помогло бы мне показать, как это может быть достигнуто, или есть ли способ конвертировать между формами с данными, к которым у меня есть доступ? Я также время от времени встречал ссылки на метод pdf.create (), но я не могу найти по нему документацию и предполагаю, что он должен принадлежать сторонней библиотеке для JS.

Если вы знаете о Любая информация, которая может помочь мне понять, в чем моя проблема и что искать, чтобы найти решение, я буду очень признателен, спасибо.

1 Ответ

0 голосов
/ 17 августа 2020

Всем, кто читает этот вопрос, этот метод кажется невозможным и, вероятно, будет невероятно неэффективным для реализации. Если вы отправляете строку на nodeJS, превышающую MTU вашей ссылки на этот сервер (от 68 до> 1500 байтов в зависимости от каждого компонента вашей сети), пакет будет отброшен без каких-либо попыток разрешить или выбросить ошибка. Что вы должны сделать, так это использовать подход с использованием кодировки multipart / form-data для отправки любых файлов на сервер (подробнее об этом можно найти здесь ).

Следует также упомянуть что загрузка файла в базу данных не рекомендуется ни при каких обстоятельствах (из-за того, что базы данных являются довольно неэффективным хранилищем для больших объемов данных), и что следует сделать, так это загрузить ссылку на путь к файлу или URL-адрес, по которому можно найти файл. Затем на стороне клиента этот файл может отображаться как таковой, когда вы извлекаете местоположение файла ...

<object id="pdf" data="../files/test.pdf"></object>

Чтобы изменить атрибут данных, можно сделать следующее ...

document.getElementById("pdf").data = "../files/test2.pdf";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...