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

问题描述 投票:0回答:3

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

我正在尝试使用 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'))
(如如何在 HTTP 请求中发送缓冲区?中建议)时,情况是一样的。

当我尝试附加

file_buffer.toString('binary')
时,node.js 崩溃说:

节点:../src/stream_base.cc:157 int 节点::StreamBase::Writev(const v8::FunctionCallbackInfo&):断言`(偏移量)<= (storage_size)' failed.

中止(核心转储)

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

node.js multipartform-data form-data
3个回答
58
投票

您明确需要为

filename
字段设置
data
,否则缓冲区不会作为文件上传:

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

这已记录在此处(尽管不是很清楚):https://github.com/form-data/form-data#alternative-submission-methods(向下滚动到第四个示例)。


0
投票

2023 年 6 月更新

根据 Mozila 开发者

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

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

如果您将文件名

"chris.jpg"
更改为
{filename:"chris.jpg"}
,服务器(
nodejs
express-fileupload
)会收到
name: '[object Object]'
,而不是您期望的。


0
投票

看起来需要将其从 Buffer 转换为 Blob。

const file_blob = new Blob([file_buffer], { type: file_type })

const formData = new FormData()
formData.append('file', file_blob, filename)
© www.soinside.com 2019 - 2024. All rights reserved.