You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 08:08:05