我尝试使用express和multer上传大文件。
回叫请求发送200但我不知道如何将我的文件上传到特定文件夹中。我尝试了两种方法但没有成功。
第一个:
app.post('/upload', (req, res, next) => {
let myFile = req.files;
let i = 0;
for (i; i < myFile.length; i++) {
let filemName = MyFile[i].name
myFile[i].mv(`${__dirname}/uploads/${fileName}`, function(err) {
if (err) {
return res.status(500).send(err);
}
res.json({file: `uploads/${fileName}`});
});
}
})
此代码返回500。
第二种方式(仅使用一个文件尝试):
app.post ('/uploader', (req, res, next) => {
var file = req.files.file;
// file.mv(`${__dirname}/uploads/${file.name}`), function(err) {
// if (err) {
// return res.status(500).send(err);
// }
// }
console.log('file');
console.log(file[0]);
fs.rename(req.file[0], '~/dev/file-upload/backend/uploads' + file[0].name, function (err) {
if (err) throw err;
console.log('Move complete');
})
此代码不会返回任何错误,但不会将文件放入文件夹中。 最后我的客户端代码:
handleUploadFile(event) {
event.preventDefault();
const data = new FormData();
let c = this.uploadInput.files.length;
console.log("c = ", c);
console.log("mydata :", this.uploadInput.files);
for (var i = 0; i < c; i++){
data.append('filename', this.uploadInput.files[i].name);
data.append('file', this.uploadInput.files[i]);
}
var options = {
method: 'post',
body: data,
}
fetch(apiBaseUrl + '/uploader', options).then((response) => {
console.log('res', response);
}).catch(function (err) {
console.error("!!! error :", err);
})
}
render() {
return (
<form onSubmit={this.handleUploadFile}>
<div>
<input ref={(ref) => { this.uploadInput = ref; }} type="file" multiple="multiple" />
</div>
<br />
<div>
<button>Upload</button>
</div>
</form>
);
}
感谢您的帮助:)