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

Iva*_*son 4 multipartform-data form-data node.js

我在内存中有一个文件(在缓冲区中),它在文件系统上不存在(所以我不能只传输它).

我正在尝试使用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) {});
Run Code Online (Sandbox Code Playgroud)

当我尝试追加file_bufferSignServer时说它data是空的:

状态400 - 上载时缺少文件内容

当我尝试追加时escape(file_buffer.toString('binary'))(如在HTTP请求如何发送缓冲区中的建议),这是同一个故事.

当我尝试追加file_buffer.toString('binary')node.js崩溃说:

node:../ src/stream_base.cc:157 int node :: StreamBase :: Writev(const v8 :: FunctionCallbackInfo&):断言`(偏移)<=(storage_size)'失败.

中止(核心倾倒)

如何在Node.JS中通过HTTP(multipart/form-data)正确发送文件(缓冲区)?

rob*_*lep 11

您明确需要filename为该data字段设置a ,否则缓冲区不会作为文件上载:

form.append('data', file_buffer, { filename : 'document.pdf' });
Run Code Online (Sandbox Code Playgroud)

这里记录了(尽管不是很清楚):https://github.com/form-data/form-data#alternative-submission-methods(向下滚动到第四个例子).

  • 根据https://developer.mozilla.org/en-US/docs/Web/API/FormData/append,我相信它应该是`form.append('data', file_buffer, 'document.pdf');` (2认同)
  • @robertklep 即使在 4 年后这仍然很有帮助,非常感谢! (2认同)
  • 我的救星!谢谢! (2认同)