【发布时间】:2022-03-07 23:56:16
【问题描述】:
我检查了其他类似的帖子,但它仍然无法正常工作:它在 console.log 时给我未定义。我还根据其他帖子定义了 multer 中间件,所以我不知道发生了什么。但是当我通过邮递员上传图片时,它可以返回201,正如预期的那样。任何帮助表示赞赏!
ReactJS 函数:
const UploadImageToBackend = async () => {
console.log(UploadedImage) //UploadedImage is something like /Users/.../.jpg
let formData = new FormData()
formData.append('profile',
{name : new Date() + "_profile", uri: UploadedImage, type:'image/jpg'})
try{
const res = await client.post('/upload-avatar',formData, {
headers:{
Accept : 'application/json',
authorization: 'JWT some JWT'
},
})
console.log(res.data)
}catch(error){
console.log(error.response.data) //gives "Error while uploading Image, try after some time" error
}
}
后端路由:
const fileFilter = (req,file,callback) => {
if (file.mimetype.startsWith('image')){
callback(null,true)
}else{
callback('invalid image file', false)
}
}
const storage = multer.diskStorage({})
const uploads = multer({storage, fileFilter})
router.post('/upload-avatar',isAuth, uploads.single('profile'),uploadProfile)
后端上传功能(到Cloudinary)
exports.uploadProfile = async (req,res)=>{
const user = req.user
if (!user){
return res.status(401).json({success:false,message:"unauthorized access!"})
}else{
console.log(req.file.path) //undefined
try{
const upload_result = await cloudinary.uploader.upload(req.file.path, {
public_id: `${user._id}_profile`,
width:500,
height:500,
crop: 'fill'
})
await User.findByIdAndUpdate(user._id, {avatar: upload_result.url})
res.status(201).json({success:true,message: "Profile picture successfully uploaded"})
}catch (error){
res.status(500).json({success:false,message:
"Error while uploading Image, try after some time"})
}
}
}
【问题讨论】:
-
您根本没有上传文件。您已在
FormData的profile键下添加了一个 JavaScript 对象。它将被序列化为字符串"[object Object]"。你确定你不只是想发布 JSON 吗?请参阅Using FormData Objects 获取指南
标签: javascript node.js reactjs axios multer