Я использую React. js на клиенте и Express. js на сервере. Файл загружается без проблем, но по какой-то причине React. js на секунду отображает компонент успеха сообщения, а затем перезагружается в основной исходный компонент. Эта проблема возникает, когда я пытаюсь загрузить файл .csv, но при загрузке изображения (.png, .jpeg) это работает как чудо.
Я беру код из этого репозитория: https://github.com/bradtraversy/react_file_uploader, с некоторыми изменениями, но в основном это так.
Заранее благодарим за помощь
Fileupload. js
const FileUpload = () => {
const [file, setFile] = useState('');
const [filename, setFilename] = useState('Choose File');
const [uploadedFile, setUploadedFile] = useState({});
const [message, setMessage] = useState('');
const onChange = e => {
setFile(e.target.files[0]);
setFilename(e.target.files[0].name);
};
const onSubmit = async e => {
e.preventDefault();
const formData = new FormData();
formData.append('file', file);
try {
const res = await axios.post('/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data'
},
});
const { fileName} = res.data;
setUploadedFile({ fileName, filePath });
setMessage('File Uploaded');
} catch (err) {
if (err.response.status === 500) {
setMessage('There was a problem with the server');
} else {
setMessage(err.response.data.msg);
}
}
};
return (
<Fragment>
{message ? <Message msg={message} /> : null}
<form onSubmit={onSubmit}>
<div className='custom-file mb-4'>
<input
type='file'
className='custom-file-input'
id='customFile'
onChange={onChange}
/>
<label className='custom-file-label' htmlFor='customFile'>
{filename}
</label>
</div>
<input
type='submit'
value='Upload'
className='btn btn-primary btn-block mt-4'
/>
</form>
{uploadedFile ? (
<div className='row mt-5'>
<div className='col-md-6 m-auto'>
<h3 className='text-center'>{uploadedFile.fileName}</h3>
</div>
</div>
) : null}
</Fragment>
);
};
сервер. js
app.post('/upload', (req, res) => {
if (req.files === null) {
return res.status(400).json({ msg: 'No file uploaded' });
}
const file = req.files.file;
file.mv(`${__dirname}/client/public/uploads/${file.name}`, err => {
if (err) {
console.error(err);
return res.status(500).send(err)
}
res.json({ fileName: file.name, filePath: `/uploads/${file.name}` });
//console.log("upload y empieza la logica")
//res.send(myLogic.mySpecialFunction());
})
});