我正在尝试使用表单数据在https请求中上传文件。我有这个
function uploadDocument(filepath) {
var options = {
host : 'myserver',
port : 443,
path : '/platform-api/v1/documents',
method : 'POST',
headers : {
'Authorization' : 'Bearer 56356363',
'Accept' : 'application/json'
}
};
var req = https.request(options, function(res) {
var buffer = "";
res.on('data', function(chunk) {
buffer += chunk;
});
res.on('end', function(chunk) {
var json = JSON.parse(buffer.toString());
console.log(json);
});
});
var form = new FormData();
form.append('file', fs.createReadStream(filepath));
form.append('project_id', 4);
form.pipe(req);
req.on('error', function(e) {
console.log('problem with request:', e.message);
});
req.end();
}
但我回来了
problem with request: write after end
{ errors:
{ file: 'missing-required-key',
project_id: 'missing-required-key' } }
有谁知道出了什么问题?
由于
答案 0 :(得分:0)
仅在已调用req.end()
时才使用pipe
。
FormData是异步流,您不能在调用req.end()
之后立即调用.pipe(req)
。根据{{3}},默认情况下,管道在读取器流(表单本身)结束时为写入器流(在这种情况下为end()
)调用写入器流(在这种情况下为req
)。
因此,当您不需要req.end()
时,请使用pipe
;如果您使用的是管道,请不要使用req.end()
。