我使用 multiparty 解析前端上传的文件,然后使用 request 上传到文件服务器。
form.on('part', function(part) {
if (part.filename) {
var formData = {
name: part.filename,
my_file: part
};
request.post({
url: 'http://service.com/upload',
formData: formData
}, function optionalCallback(err, httpResponse, body) {
if (err) {
return console.error('upload failed:', err);
}
console.log('Upload successful! Server responded with:', body);
});
}
});
request的官方示例是将文件的 readStream , 传入 formdata。例如
var formData = {
my_file: fs.createReadStream(__dirname + '/unicycle.jpg'),
}
但是我并不想先创建临时文件,然后再获取 readStream。 由于 multiparty的 part 也是一种可读流, transform stream,它同时具有 readStream 和 writeStream 的接口,所以我想将 part 直接传入formdata。 但是遇到了下面的错误
TypeError: form-data: Invalid non-string/buffer chunk
由于文件服务器是远端的线上服务器,它的细节我并不清楚。 但是它确实能支持从文件创建的 readStream 的 formdata 的上传。 但是 part 就不行。
这里想请教一下, transform stream 和 fs.createStream 有什么不同? 有什么办法可以将 transform stream 的数据 转交给 readStream? 谢谢。