我有一个文件在内存中(在缓冲区中),它不存在于文件系统中(所以我不能只是流)。
我正在尝试使用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)?
2条答案
按热度按时间hgc7kmma1#
您需要显式地为
data
字段设置filename
,否则缓冲区不会作为文件上传:这里有记录(虽然不是很清楚):https://github.com/form-data/form-data#alternative-submission-methods(向下滚动到第四个示例)。
zkure5ic2#
2023年6月更新
根据Mozila Developer
当值为Blob(或File)时,可以使用filename参数指定其名称:
如果您将文件名
"chris.jpg"
更改为{filename:"chris.jpg"}
,则服务器(nodejs
和express-fileupload
)收到的是name: '[object Object]'
,而不是您期望的。