React Native上传图片至Node.js Express(Multer处理)时req.file始终为undefined的求助
React Native上传图片至Node.js Express(Multer处理)时req.file始终为undefined的求助
我现在卡在一个非常棘手的问题上:用React Native上传图片到部署在EC2上的Node.js后端,后端用Multer解析FormData,但req.file一直是undefined,根本拿不到上传的文件。以下是我的具体实现和已经尝试过的排查步骤,麻烦各位帮我看看哪里出问题了!
React Native 前端代码
选择图片的函数
const pickImage = async () => { const result = await ImagePicker.launchImageLibraryAsync({ mediaTypes: ['images'], allowsEditing: true, aspect: [1, 1], quality: 1, }); if (!result.canceled && result.assets.length > 0) { const asset = result.assets[0]; const form = new FormData(); form.append("file", { uri: asset.uri, name: asset.fileName, type: asset.mimeType, } as any); setFormData(form); } };
上传图片的请求函数
const uploadNewProfileImage = async () => { // ... 其他逻辑 const response = await fetch(`${BACKEND_URL}/upload-profile-image`, { method: "POST", headers: { Authorization: `Bearer ${token}`, }, body: formData }); // ... 处理响应 };
Node.js 后端代码
const storage = multer.memoryStorage(); const upload = multer({ storage: storage, limits: { fileSize: 20 * 1024 * 1024, // 20MB限制 } }); router.post('/upload-profile-image', upload.single('file'), async (req, res) => { const file = req.file; // 这里一直是undefined // 后续计划将文件上传到S3存储桶 });
我观察到的请求细节
我查看了请求头,发现Content-Disposition字段显示:
Content-Disposition: form-data; name="newimage"
已经尝试过的解决方案
我几乎把能想到的方法都试了一遍,但问题依然存在:
- 手动设置过请求的
Content-Type头(也试过不设置,让请求自动处理) - 把Multer的存储方式从
memoryStorage换成DiskStorage,同时确保项目目录下的uploads/文件夹存在且有读写权限 - 参考过社区里类似问题的解决方案
- 配置了Nginx,确保它能接收最大20MB的文件
- 反复验证Node项目目录下的uploads文件夹确实存在
现在我实在不知道还有什么排查方向了,到底要怎么让Multer正确解析FormData,拿到文件后上传到AWS S3呢?
内容来源于stack exchange
相关产品推荐
相关产品推荐

