我从ui上载上传文件api时遇到以下问题。我正在从react js命中节点js api,然后从node js命中公共api。
节点版本:-10.15.3
npm版本:-6.4.1
router.route("/uploadLocaleFile").post(function(req, res, next) {
req.on("data", data => {
uploadFile(req, data, res);
});
});
function uploadFile(req, data, res) {
request
.post({
uri: `${notebookPath}/localfile/${req.query.experimentId}`,
body: data,
headers: {
"Content-Type": req.headers["content-type"],
Authorization: req.headers["authorization"]
}
})
.pipe(res);
}
答案 0 :(得分:2)
尝试此代码
router.route("/uploadLocaleFile").post(function(req, res, next) {
const chunks = [];
req
.on('data', data => chunks.push(data))
.on("end", _ => uploadFile(req, Buffer.concat(chunks), res)
;
});
function uploadFile(req, data, res) {
request
.post({
uri: `${notebookPath}/localfile/${req.query.experimentId}`,
body: data,
headers: {
"Content-Type": req.headers["content-type"],
Authorization: req.headers["authorization"]
}
})
.pipe(res);
}
答案 1 :(得分:1)
您可能想尝试@Yaroslav Gaponov解决方案。
您的问题是.pipe(res)
在每个data
事件上触发。到您的第二个data
事件发生时,res
流已经关闭。
@Yaroslav Gaponov所做的是,在每个data
事件中,他将传入的缓冲区存储到一个数组中。流完成后,将发出end
事件,只有这样,您才可以对res
进行1次写入,即 uploadFile .pipe(res) >。
您也可以像这样尝试request
一根管道:
req.pipe(request(your_options))。pipe(res)