jdr*_*drm 2 multipartform-data node.js
我目前正在接收一个编码为base64字符串的文件作为json有效负载的一部分:
{
"file":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGRlZmluaXRpb25zIHhtb..."
}
Run Code Online (Sandbox Code Playgroud)
使用该字符串我应该将文件作为multipart/form-data发布到不同的服务,所以我有一个像这样的方法(使用请求模块):
var request = require('request');
var fs = require('fs');
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);
}
Run Code Online (Sandbox Code Playgroud)
这目前无效.如果我将文件写入磁盘并从那里读取它,如下所示:
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'));
});
}
Run Code Online (Sandbox Code Playgroud)
然后它工作...所以有没有一种方法将base64字符串作为有效参数传递给表单?(现在尝试使用缓冲区而不工作)
我认为这http://localhost:8888/upload是file一个"文件".将文件流传递给form.append()它时,已经知道它是一个"文件".通过Buffer它时没有.
但是,您可以通过将选项对象作为第三个参数传递form.append()来将您解释Buffer为"文件".options对象应该有一个名为filename包含文件名的字符串的键.可选地,对象还可以包括contentType字符串和knownLength整数.如果contentType未包含,form.append()将尝试从中派生内容类型filename.
除了确定contentType(当它没有在options参数中显式传递)时,filename你指定的是无关紧要的(即你可以使用你想要的任何文件名).当然,除非您打算使用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' });
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6207 次 |
| 最近记录: |