从 axios 到 busboy 的文件上传永远不会完成
file upload from axios to busboy never finishes
这是我的简单文件上传代码。我在服务器上使用 nodejs 和 busboy,在客户端上使用 axios 和 react。我 select 文件,提交表单,我只看到 /upload 在服务器端处理:
app.post('/upload', function (req, res) {
console.log("upload"); // we do get here
if (req.busboy) {
// and here
req.busboy.on("file", function (fieldName, fileStream, fileName, encoding, mimeType) {
console.log("on file"); // but never get here
});
return req.pipe(req.busboy);
}
});
但是永远不会调用 on("file") 回调。这是我的客户端代码:
客户代码:
<input type="file" onChange={this.getFile} />
getFile(e){
e.preventDefault();
let reader = new FileReader();
let file = e.target.files[0];
reader.onloadend = (theFile) => {
const data = new FormData();
data.append('file', file);
axios.post("/upload",file);
};
reader.readAsDataURL(file);
}
可能是什么问题?
更新:req.body 未定义。我添加了这些行:
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: false, limit: '50mb'}));
req.body 不为空且包含文件缓冲区,但 on('file') 尚未启动。
错误在这里:
reader.onloadend = (theFile) => {
const data = new FormData();
data.append('file', file);
axios.post('/upload', data); // <-- I had wrong second argument here!
};
这是我的简单文件上传代码。我在服务器上使用 nodejs 和 busboy,在客户端上使用 axios 和 react。我 select 文件,提交表单,我只看到 /upload 在服务器端处理:
app.post('/upload', function (req, res) {
console.log("upload"); // we do get here
if (req.busboy) {
// and here
req.busboy.on("file", function (fieldName, fileStream, fileName, encoding, mimeType) {
console.log("on file"); // but never get here
});
return req.pipe(req.busboy);
}
});
但是永远不会调用 on("file") 回调。这是我的客户端代码: 客户代码:
<input type="file" onChange={this.getFile} />
getFile(e){
e.preventDefault();
let reader = new FileReader();
let file = e.target.files[0];
reader.onloadend = (theFile) => {
const data = new FormData();
data.append('file', file);
axios.post("/upload",file);
};
reader.readAsDataURL(file);
}
可能是什么问题?
更新:req.body 未定义。我添加了这些行:
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({extended: false, limit: '50mb'}));
req.body 不为空且包含文件缓冲区,但 on('file') 尚未启动。
错误在这里:
reader.onloadend = (theFile) => {
const data = new FormData();
data.append('file', file);
axios.post('/upload', data); // <-- I had wrong second argument here!
};