NodeJS 如何将表单数据中的缓冲区发送到SignServer?

lkaoscv7  于 2023-06-29  发布在  Node.js
关注(0)|答案(2)|浏览(138)

我有一个文件在内存中(在缓冲区中),它不存在于文件系统中(所以我不能只是流)。
我正在尝试使用HTTP将其发送到SignServer。
我是这样做的:

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'))(如How do I send a buffer in an HTTP request?中所建议的)时,情况是一样的。
当我尝试追加file_buffer.toString('binary')时,node.js崩溃了,说:
node:../src/stream_base.cc:157 int node::StreamBase::Writev(const v8::FunctionCallbackInfo&):Assert“(offset)<=(storage_size)”失败。
中止(堆芯转储)
如何在Node.JS中通过HTTP(multipart/form-data)正确发送文件(buffer)?

hgc7kmma

hgc7kmma1#

您需要显式地为data字段设置filename,否则缓冲区不会作为文件上传:

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

这里有记录(虽然不是很清楚):https://github.com/form-data/form-data#alternative-submission-methods(向下滚动到第四个示例)。

zkure5ic

zkure5ic2#

2023年6月更新

根据Mozila Developer
当值为Blob(或File)时,可以使用filename参数指定其名称:

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

如果您将文件名"chris.jpg"更改为{filename:"chris.jpg"},则服务器(nodejsexpress-fileupload)收到的是name: '[object Object]',而不是您期望的。

相关问题