部署至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
相关产品推荐
相关产品推荐

