如何在HTTP请求中发送缓冲区?

我在内存中有一个文件(缓冲区) – 文件系统上没有文件。 我想发送缓冲区到另一个会谈HTTP的服务器。

例如,某些API A在内存中创build一个文件, SignServer处理这些文件,并用一个新的缓冲区进行响应。 我的API从A获取文件并将其提供给SignServer。

我尝试以多种方式将文件发送到SignServer,但它始终以状态400响应(请求中缺less字段“数据”)。


我试过的:

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 ,它确实有内容(不是空的,不是未定义的,实际上有字节里面)。 所以string缓冲区给了一个空的string。

我试图用请求模块做同样的事情,它也没有工作。

请注意,SignServer不是用Node或JavaScript编写的。 这是一个Java应用程序,所以它可能不适用于JSON(这就是为什么我试图用querystring )。 是的,我试着发送json。

data被设置为空string的原因在这个问题中被描述,并且在这个问题中给出解决scheme。

像这样转义和串化缓冲区:

 var data = querystring.stringify({ workerName: 'PDFSigner', data: escape(file_buffer).toString('binary') }); 

正如@robertklep提到的,你的另一个问题是你不能使用application/x-www-form-urlencoded发送一个大文件。 你需要用multipart/form-data