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

使用Axios、Multer、Cloudinary上传文件遇EROFS只读文件系统错误

解决Cyclic平台部署MERN应用后图片上传只读文件系统错误

错误原因

Cyclic属于无服务器平台,其运行环境的文件系统是只读的。你的Multer配置使用diskStorage尝试将文件写入本地磁盘路径/var/task/src/public/images,这在平台环境下不被允许,因此抛出EROFS: read-only file system错误。

解决方案

既然最终要将图片上传到Cloudinary,完全不需要把文件写入本地磁盘。改用Multer的memoryStorage将文件暂存到内存,再直接从内存上传到Cloudinary即可。

步骤1:修改Multer配置为内存存储

const multer = require("multer");

// 用内存存储替代磁盘存储,避免写入本地文件系统
const storage = multer.memoryStorage();

const multerFilter = (req, file, cb) => {
  if (file.mimetype.startsWith("image")) {
    cb(null, true);
  } else {
    cb(new Error("Unsupported file format"), false);
  }
};

exports.uploadPhoto = multer({
  storage: storage,
  fileFilter: multerFilter,
  limits: { fileSize: 2000000 },
});

步骤2:修改上传逻辑,直接从内存上传到Cloudinary

const cloudinary = require("cloudinary").v2;
const { uploadPhoto } = require("./path/to/your-multer-config");

// 配置你的Cloudinary账号信息
cloudinary.config({
  cloud_name: "你的CloudName",
  api_key: "你的APIKey",
  api_secret: "你的APISecret",
});

// 处理分类创建的路由
router.post("/create-category", uploadPhoto.single("image"), async (req, res) => {
  try {
    // 从请求中获取内存里的文件buffer
    const fileBuffer = req.file.buffer;

    // 通过Cloudinary的upload_stream直接上传内存中的文件
    await new Promise((resolve, reject) => {
      cloudinary.uploader.upload_stream(
        {
          folder: "category-images", // 可选:Cloudinary中的存储文件夹
          format: "jpeg"
        },
        (error, result) => {
          if (error) return reject(error);
          
          // 这里执行分类创建逻辑,比如将分类信息和图片URL存入数据库
          // 示例:
          // const newCategory = await Category.create({
          //   name: req.body.name,
          //   imageUrl: result.secure_url
          // });

          res.status(200).json({
            success: true,
            message: "分类创建成功",
            // category: newCategory
          });
          resolve();
        }
      ).end(fileBuffer);
    });

  } catch (error) {
    res.status(500).json({
      success: false,
      message: error.message
    });
  }
});

内容的提问来源于stack exchange,提问作者Abu Sayem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:17:27