Я работаю над компонентом реагирования, где я хочу загрузить файл Excel на сервер. Вот что я пытаюсь Но он дает мне пустой объект, когда я консоль запроса тела
<input type="file" id="avatar" name="avatar" onChange={this.fileHandler.bind(this)} style={{"padding":"10px"}}/>
Вот метод обработчика файла, который будет выполняться при изменении входного файла:
fileHandler = (event) => {
event.preventDefault();
let fileObj = event.target.files[0];
console.log(fileObj);
//console.log(JSON.stringify(fileObj));
var data = new FormData()
data.append('file', fileObj)
fetch("/upload", {
method: 'POST',
body: data
}).then(function(response) {
if (response.status >= 400) {
throw new Error("Bad response from server");
}
return response.text();
}).then(function(data) {
console.log(data)
}).catch(function(err) {
console.log(err)
});
}
Вот код сервера для загрузки файл.
app.post('/upload', function(req, res) {
console.log(req.body); // Output : {} or undefined
/*try {
if(!req.files) {
res.send({
status: false,
message: 'No file uploaded'
});
} else {
let avatar = req.files.avatar;
//Use the mv() method to place the file in upload directory (i.e. "uploads")
avatar.mv('./uploads/' + avatar.name);
//send response
res.send({
status: true,
message: 'File is uploaded',
data: {
name: avatar.name,
mimetype: avatar.mimetype,
size: avatar.size
}
});
}
} catch (err) {
res.status(500).send(err);
}*/
})
Если я попробую ниже с помощью действия формы, это даст мне правильный вывод в req.files, но я не хочу перенаправлять.
<form id="myForm" method="post" encType="multipart/form-data" action="/upload">
<input type="hidden" name="msgtype" value="2"/>
<input type="file" id="avatar" name="avatar" onChange={this.fileHandler.bind(this)} style={{"padding":"10px"}}/>
<input type="submit" value="Upload" />
</form>
Также я надеваю не хочу использовать ax ios, так как я использую тот же запрос на выборку для всех других исполнений. Любая помощь приветствуется.