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

部署至Cyclic.sh时遭遇EROFS只读文件系统错误求助

问题解决:Cyclic.sh部署后文件系统只读错误

本地用multer将上传图片存到./tmp目录再传ImageBB正常,但部署到Cyclic.sh后出现Error: EROFS: read-only file system, open "Filename"错误,原因是Cyclic.sh的文件系统为只读,无法写入本地磁盘目录。

解决方案:改用内存存储处理文件

不要将文件写入磁盘,使用multer的memoryStorage直接在内存中处理文件内容,再上传到ImageBB。

修改后的代码示例:

// 替换磁盘存储为内存存储
const storage = multer.memoryStorage();
const upload = multer({ storage: storage });

// 移除静态文件服务配置(不再需要磁盘文件)
// app.use(express.static(__dirname + '/tmp'));
// app.use('./tmp', express.static('tmp'));

app.post('/upload', upload.single('image'), async (req, res) => {
  try {
    // 从请求中获取文件的二进制缓冲区
    const fileBuffer = req.file.buffer;
    const fileName = req.file.originalname;

    // 构建上传到ImageBB的FormData
    const formData = new FormData();
    formData.append('image', fileBuffer, fileName);

    // 调用ImageBB上传接口(替换为你的API密钥)
    const uploadResponse = await fetch('https://api.imgbb.com/1/upload?key=YOUR_IMGBB_API_KEY', {
      method: 'POST',
      body: formData
    });

    const result = await uploadResponse.json();
    res.json(result);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

核心要点

  • Cyclic.sh等PaaS平台的文件系统通常只读,禁止本地磁盘写入操作,必须用内存或云存储替代。
  • memoryStorage将文件暂存于内存,处理完成后自动释放,无需手动清理临时文件。
  • 上传ImageBB时直接使用req.file.buffer(文件二进制数据),避免依赖本地文件路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:36:20