1. Вероятно, вы не зарегистрировали промежуточное ПО.
Согласно примеру do c , вы должны зарегистрировать промежуточное ПО express -fileupload, прежде чем обращаться к req.files:
const express = require('express');
const fileUpload = require('express-fileupload');
const app = express();
// default options
app.use(fileUpload());
Также не забудьте добавить нулевую проверку в случае, если файлы не загружены:
app.post('/upload', function(req, res) {
if (!req.files || Object.keys(req.files).length === 0) {
return res.status(400).send('No files were uploaded.');
}
let file = req.files.file;
// do something with uploaded temp file
}
2. Тип содержимого должен быть multipart/form-data
при загрузке файла
const handleSubmit=(e)=>{
e.preventDefault()
const formData=new FormData()
formData.append('file', file)
setfile('')
}
function addPost(postdetail){
axios.post('http://localhost:4000/blog',formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
}).then(res=>{
dispatch({
type:'ADD_DATA',
payload:res.data
})
}).catch(error=>{
console.log(error)
})
}
3. Другие поля формы (des, title) не могут быть отправлены с использованием multipart / formdata
Рассмотрите возможность открытия двух маршрутов для создания блога.
[POST] '/blog/upload-image'
для загрузки изображений
[POST] '/blog/new
для создания блога (title, des и image_id получены из ответа на загрузку изображения)