Как отправить буфер в форме данных в SignServer?

У меня есть файл в памяти (в буфере), он не существует в файловой системе (поэтому я не могу просто передать это).

Я пытаюсь отправить его в SignServer, используя HTTP.

Вот как я пытаюсь это сделать:

var formdata = require('form-data'); var form = new formdata();

form.append('workerName', 'PDFSigner');
form.append('data', file_buffer);
// or
// escape(file_buffer.toString('binary'))
// or
// file_buffer.toString('binary') (without escaping)

var request = form.submit('http://localhost:8080/signserver/process', function(err, res) {});

Когда я пытаюсь добавить file_buffer SignServer говорит, что data пустой:

Статус 400 - Отсутствует содержимое файла при загрузке

Когда я пытаюсь добавить escape(file_buffer.toString('binary')) (как предложено в разделе Как отправить буфер в HTTP-запросе?) Это та же история.

Когда я пытаюсь добавить file_buffer.toString('binary') node.js вылетает, говоря:

узел: ../src/stream_base.cc:157 int узел::StreamBase::Writev(const v8::FunctionCallbackInfo&): утверждение `(смещение) <= (storage_size)'не выполнено.

Прервано (ядро сброшено)

Как правильно отправить файл (буфер) через HTTP (multipart/form-data) в Node.JS?

2 ответа

Решение

Вам явно необходимо установить filename для data поле, иначе буфер не загружается как файл:

form.append('data', file_buffer, { filename : 'document.pdf' });

Это задокументировано (хотя и не очень ясно) здесь: https://github.com/form-data/form-data (прокрутите вниз до четвертого примера).

Обновлено июн 2023 г.

По словам разработчика Mozila

Если значением является Blob (или File), вы можете указать его имя с помощью параметра filename:

       formData.append("userpic", myFileInput.files[0], "chris.jpg");

Если вы измените имя файла"chris.jpg"к{filename:"chris.jpg"}, сервер (nodejsсexpress-fileupload) полученныйname: '[object Object]'вместо того, которого вы ожидаете.

Другие вопросы по тегам