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

使用Expo FileSystem上传图片至Node.js后端失败问题求助

问题定位

你收到"ok"响应不代表文件上传成功,核心问题出在前端uploadAsync调用参数缺失,加上后端没有做文件接收校验,具体问题点:

  • Expo FileSystem.uploadAsync 必须显式配置上传类型、表单字段名,默认参数不会按Multer要求的multipart格式把文件挂载到你指定的images字段下,Multer匹配不到对应字段就不会处理文件流
  • 后端接口不管有没有收到文件都直接返回"ok",误导你以为请求逻辑正常
  • 如果你用真机调试还写了localhost,请求根本没打到你本地的后端服务(localhost指向测试设备自身)
修复步骤

1. 修正前端上传代码

补全uploadAsync的配置项,字段名和后端Multer配置完全对齐:

const handleSubmit = async (listing, { resetForm }) => {
  try {
    const response = await FileSystem.uploadAsync(
      // 真机调试替换为你电脑的局域网IP,比如http://192.168.3.12:5000,模拟器调试可以用localhost
      "http://你的后端服务地址:5000/products/addProduct",
      listing.images[0],
      {
        httpMethod: "POST",
        // 指定为multipart表单上传格式
        uploadType: FileSystem.FileSystemUploadType.MULTIPART,
        // 字段名必须和后端upload.single("images")的参数完全一致
        fieldName: "images",
        // 其他产品表单参数放在这里
        parameters: {
          // 例: title: listing.title, price: listing.price
        }
      }
    );
    console.log("上传响应", response);
    if (response.status === 200) resetForm();
  } catch (e) {
    console.error(e);
  }
}

2. 补全后端校验逻辑

首先确认Multer实例初始化正确,再给接口加文件存在校验,不要无差别返回ok:

// 确保upload实例用了你写的storage配置初始化
const upload = multer({ storage: storage });

router.post("/products/addProduct", upload.single("images"), async (req, res) => {
  try {
    // 打印接收结果方便排查
    console.log("接收文件信息:", req.file);
    if (!req.file) {
      return res.status(400).send("未接收到上传文件");
    }
    // 这里写你自己的产品入库逻辑
    res.send("ok");
  } catch (err) {
    res.status(500).send("Error " + err);
  }
});

3. 调试环境配置检查

  • 真机调试时:后端服务要监听0.0.0.0不要只监听127.0.0.1,前端请求地址用电脑的局域网IP,保证手机和电脑在同一WiFi下
  • 安卓真机调试:在项目app.json里加配置允许明文HTTP请求:
{
  "expo": {
    "android": {
      "permissions": ["INTERNET"],
      "usesCleartextTraffic": true
    }
  }
}

内容的提问来源于stack exchange,提问作者Sb Zakaria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:27:22