Как отправить буфер в форме данных в 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]'
вместо того, которого вы ожидаете.