Node.js Nodejs将base64字符串作为表单数据发布
我当前收到一个编码为base64字符串的文件,作为json有效负载的一部分:Node.js Nodejs将base64字符串作为表单数据发布,node.js,multipartform-data,Node.js,Multipartform Data,我当前收到一个编码为base64字符串的文件,作为json有效负载的一部分: { "file":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGRlZmluaXRpb25zIHhtb..." } 使用该字符串,我应该将文件作为多部分/表单数据发布到不同的服务,因此我有一个类似这样的方法(使用): 而这目前不起作用。 如果我将文件写入磁盘并从磁盘读取,如下所示: var request = require('request')
{
"file":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGRlZmluaXRpb25zIHhtb..."
}
使用该字符串,我应该将文件作为多部分/表单数据发布到不同的服务,因此我有一个类似这样的方法(使用):
而这目前不起作用。
如果我将文件写入磁盘并从磁盘读取,如下所示:
var request = require('request');
var fs = require('fs');
var importFile function(fileBase64Encoded, cb) {
var decodedFile = new Buffer(fileBase64Encoded, 'base64');
fs.writeFile('temp.txt', decodedFile, function (err) {
if (err) return console.log(err);
var r = request.post('http://localhost:8888/upload', function (err, httpResponse, body) {
if (err) {
cb(err);
}
cb(null, body);
})
var form = r.form();
form.append('file', fs.createReadStream('temp.txt'));
});
}
然后它就工作了……那么有没有真正的方法将base64字符串作为有效参数传递给表单呢?(目前正在尝试使用缓冲区但不工作)我假设
http://localhost:8888/upload
希望文件为。。。“文件”。当您将文件流传递给form.append()
时,它已经知道它是一个“文件”。当传递缓冲区时
不会
但是,您可以告诉form.append()
,通过将选项对象作为第三个参数传递,将缓冲区解释为“文件”。选项对象应该有一个名为filename
的键,其中包含一个带有文件名的字符串。或者,对象还可以包括contentType
字符串和knownLength
整数。如果未包括contentType
,form.append()
将尝试从文件名中派生内容类型
除了确定contentType
(在选项参数中未显式传递时),您指定的filename
是不相关的(即,您可以使用您想要的任何文件名)。当然,除非您打算在服务器端代码上使用文件名
在您的情况下,以下内容应该可以工作
var importFile = function(fileBase64Encoded, cb) {
var decodedFile = new Buffer(fileBase64Encoded, 'base64');
var r = request.post('http://localhost:8888/upload', function (err, httpResponse, body) {
if (err) {
cb(err);
}
cb(null, body);
});
var form = r.form();
form.append('file', decodedFile, { filename: 'temp.txt' });
}
调用request.post()时,是否已触发post请求?附加后如何发射?@Sisirrequest.post()
在事件循环的下一个周期中自动激发。对r
(请求对象)的任何更改都可以在触发下一个循环之前完成。
var importFile = function(fileBase64Encoded, cb) {
var decodedFile = new Buffer(fileBase64Encoded, 'base64');
var r = request.post('http://localhost:8888/upload', function (err, httpResponse, body) {
if (err) {
cb(err);
}
cb(null, body);
});
var form = r.form();
form.append('file', decodedFile, { filename: 'temp.txt' });
}