Javascript 在mern堆栈中使用multer上传图像和文本
我在我的mern stack应用程序中使用body parser、multer和express。我需要上传一个文件以及表单中的一些文本。我发送的邮寄请求如下:Javascript 在mern堆栈中使用multer上传图像和文本,javascript,node.js,express,file-upload,multer,Javascript,Node.js,Express,File Upload,Multer,我在我的mern stack应用程序中使用body parser、multer和express。我需要上传一个文件以及表单中的一些文本。我发送的邮寄请求如下: function addPost(postdetail){ axios.post('http://localhost:4000/blog',postdetail,{ headers:{ "Content-Type": "multipart/form-data" }}).then(
function addPost(postdetail){
axios.post('http://localhost:4000/blog',postdetail,{ headers:{
"Content-Type": "multipart/form-data"
}}).then(res=>{
dispatch({
type:'ADD_DATA',
payload:res.data,
})
}).catch(error=>{
console.log(error)
})
}
当我添加标题时,我得到一个空对象作为req.body的输出。但是,当没有添加多部分/表单数据时,我会得到另一个req.body,但只有文件是空的
我使用react钩子设置状态,并使用FormData附加文件。当附加值被记录时,我得到上传文件的所有信息。因此,我可以知道该文件已正确附加
const Addpost=()=> {
const [title, settitle] = useState('')
const [des, setdes] = useState('')
const [file, setfile] = useState(null)
const {addPost}=useContext(Globalcontext)
const handleSubmit=(e)=>{
e.preventDefault()
const formData = new FormData()
formData.append('file', file[0])
console.log([...formData])
const addedValue={
title,
des,
formData
}
addPost(addedValue)
settitle('')
setdes('')
setfile('')
}
return (
<div>
<form onSubmit={handleSubmit}>
<input type="text" name="title" value={title} onChange={(e)=>settitle(e.target.value)}/>
<input type="text" name="des" value={des} onChange={(e)=>setdes(e.target.value)}/>
<input type="file" name="file" onChange={(e)=>{setfile(e.target.files)}} />
<button type='submit' value='submit'>Add Post</button>
</form>
</div>
)
}
export default Addpost
我认为问题只存在于服务器端,我试图使用multer上传文件。在我使用axios post请求中的头之后,我无法向mongoose插入任何信息,我得到了
{}
用于控制台req.body,其他字段未定义。由于您使用的是multer.any()
,一系列文件将存储在req.files
中(请参阅)
在您的情况下,您只需在上载单个图像时使用multer.single()
,文件将在req.file
下可用,其余表单数据将在req.body
下可用:
exports.addPost=(upload.single('file'),(req,res)=> { ... });
我仍然得到空对象:{}当我使用upload未定义console.log(req.body)和req.file时。Single我最近回答了一个类似的问题,客户端上的表单上载不正确。检查此->可能有帮助:)否不起作用:(当我在axios post请求中添加标题时,我无法获取任何表单数据。请检查我向addPost方法发送文本和文件的方式。
exports.addPost=(upload.single('file'),(req,res)=> { ... });