我在内存(缓冲区)中有一个文件 - 文件系统上没有文件。我想将该缓冲区发送到另一个使用 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);
Run Code Online (Sandbox Code Playgroud)
我尝试打印data,结果显示:
工人名称=PDFSigner&data=
这很糟糕,因为data没有设置为file_buffer. 我尝试 print file_buffer,它确实有内容(不为空,不为未定义,实际上里面有字节)。因此,对缓冲区进行字符串化会得到一个空字符串。
我尝试对请求模块执行相同的操作,但它也不起作用。
请注意,SignServer 不是用 Node 或 JavaScript 编写的。它是一个 Java 应用程序,因此它可能不适用于 json (这就是我尝试使用 json 的原因querystring)。是的,我尝试发送 json。
data设置为空字符串的原因本期有描述,解决方案也本期给出。
像这样对缓冲区进行转义和字符串化:
var data = querystring.stringify({
workerName: 'PDFSigner',
data: escape(file_buffer).toString('binary')
});
Run Code Online (Sandbox Code Playgroud)
正如 @robertklep 提到的,您的另一个问题是您无法使用application/x-www-form-urlencoded. 你需要用 来做到这一点multipart/form-data。
| 归档时间: |
|
| 查看次数: |
19841 次 |
| 最近记录: |