Я с помощью axios отправляю файл картинки на сервер
export const uploadPhoto = ({file}) => {
const formData = new FormData();
formData.append('file',file);
const config = {
headers: {
'content-type': 'multipart/form-data'
}
}
return (dispatch) => {
return axios.post(`${apiUrl}/uploadavatar`,formData,config)
.then(response => {
setTimeout(function(){
dispatch({type: 'USER_INFO', info: response.data})
},300)
})
.catch(error => {
console.log(response)
throw(error);
});
};
};
Сделал небольшой таймаут до dispatch ( вероятность того, что загруженная фотка отобразится сразу на странице возрастает )
Вот на сервере записываю изображение
fs.mkdirs(currpath,function(err){
let form = new formidable.IncomingForm();
form.uploadDir = path.join(process.cwd(),currpath);
form.parse(req);
form.on('fileBegin', function (name, file){
console.log('begin')
file.path = path.join(dir,namedir,file.name);
});
form.on('progress', function(bytesReceived, bytesExpected) {
var percent_complete = (bytesReceived / bytesExpected) * 100;
// console.log(percent_complete.toFixed(2));
});
form.on('file', function (name, file){
console.log('Uploaded ' + file.name);
res.send('success');
});
})
Далее получаю ответ > timeout > dispatch > новый render страницы с изображением
Проблема в том что иногда картинку не находит (404 not found). Хотя если нажать в консоли и открыть ее она есть. Как можно корректно исправить ? Я еще записываю пути картинок в базу данных Mongoose и если обновить страницу то картинка в любом случае появится но хотелось бы что бы 100% без перезагрузки отображалась после отправки формы