我在内存中有一个文件(缓冲区) - 文件系统上没有文件。 我想将该缓冲区发送到另一个与HTTP协商的服务器。
例如,某些API A 在内存中创建文件,SignServer处理此类文件,并使用新缓冲区进行响应。我的API从 A 获取文件并将其提供给SignServer。
我尝试以多种方式将文件发送到SignServer,但它继续响应状态400(请求中缺少字段'data')。
我尝试了什么:
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
未设置为file_buffer
。
我尝试打印file_buffer
,它确实有内容(不是null,不是未定义,实际上有内部字节)。
因此,对缓冲区进行字符串化会产生一个空字符串。
我尝试使用request模块做同样的事情,但它也没有用。
请注意,SignServer不是用Node编写的,也不是用JavaScript编写的。它是一个Java应用程序,所以它可能不适用于json(这就是为什么我要尝试使用querystring
)。是的,我试过发送json。
答案 0 :(得分:2)
this issue中描述了将var data = querystring.stringify({
workerName: 'PDFSigner',
data: escape(file_buffer).toString('binary')
});
设置为空字符串的原因,解决方案在this issue中提供。
像这样转义并对缓冲区进行字符串化:
application/x-www-form-urlencoded
正如@robertklep所提到的,您的另一个问题是您无法使用multipart/form-data
发送大文件。您需要使用ng-model="tableValues[row][column]"
。