【发布时间】:2017-05-11 18:08:31
【问题描述】:
我在内存(缓冲区)中有一个文件 - 文件系统上没有文件。 我想将该缓冲区发送到另一个使用 HTTP 的服务器。
例如,一些 API A 在内存中创建一个文件,SignServer 操作这些文件,并以一个新的缓冲区作为响应。我的 API 从 A 获取文件并将其提供给 SignServer。
我尝试通过多种方式将文件发送到 SignServer,但它一直以状态 400 响应(请求中缺少“数据”字段)。
我尝试了什么:
var http = require('http');
var querystring = require('querystring');
var data = querystring.stringify({
workerName: 'PDFSigner',
data: file_buffer
});
var request = new http.ClientRequest({
hostname: 'localhost',
port: 8080,
path: '/signserver/process',
method: 'GET',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
// I also tried 'multipart/form-data'
'Content-Length': Buffer.byteLength(data)
}
});
request.end(data);
我尝试打印data,结果显示:
workerName=PDFSigner&data=
这很糟糕,因为 data 未设置为 file_buffer。
我尝试打印file_buffer,它确实有内容(不是空的,不是未定义的,实际上里面有字节)。
所以对缓冲区进行字符串化会得到一个空字符串。
我尝试用 request 模块做同样的事情,但它也没有工作。
请注意,SignServer 不是用 Node 或 JavaScript 编写的。这是一个 Java 应用程序,因此它可能不适用于 json(这就是我尝试使用 querystring 的原因)。是的,我尝试发送 json。
【问题讨论】:
-
请检查:nodejs.org/api/…
-
@SauliusNext - 好的,这就是我发送二进制数据的方式。但我需要发送两件东西——一件是字符串,另一件是二进制文件,我需要给它们起名字,以便 API 能够区分它们。
-
@IvanRubinson 我的猜测是您尝试联系的服务器处理文件上传?如果是这样,它将假设
multipart/form-data。文件通常不使用application/x-www-form-urlencoded发送,因为它并不适合大型(ish)二进制数据。