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

如何在Heroku托管环境中使用fs模块创建PNG文件并解决ENOENT报错

导致ENOENT: no such file or directory报错的核心原因是相对路径基准不匹配、异常未捕获,可按以下方案修复:

1. 替换相对路径为绝对路径

你当前使用的./pictures是相对路径,基准是Node进程启动时的工作目录,并非你编写代码的JS文件所在目录,只要你启动服务的目录发生变化,就会出现路径识别错误。
先引入Node内置的path模块:

const path = require('path')

修改图片路径的生成逻辑,用当前文件的绝对目录__dirname拼接路径:

const imageDir = path.join(__dirname, 'pictures', `${generatedImageId}.png`)

如果你使用ESM模块规范,没有__dirname变量,可以用以下方式拼接:

const imageDir = path.join(path.dirname(new URL(import.meta.url).pathname), 'pictures', `${generatedImageId}.png`)

2. 补充异常捕获逻辑

你当前的代码没有监听文件写入流的错误事件,出现异常时无法拿到具体报错信息,修改download函数逻辑:

var download = function(uri, filename, callback){
    request.head(uri, function(err, res, body){
        // 新增head请求错误判断
        if (err) {
            console.error('资源请求失败:', err)
            return callback(err)
        }
        console.log('content-type:', res.headers['content-type']);
        console.log('content-length:', res.headers['content-length']);

        const writeStream = fs.createWriteStream(filename)
        // 新增文件写入错误监听
        writeStream.on('error', (writeErr) => {
            console.error('文件写入失败:', writeErr)
            callback(writeErr)
        })
        request(uri).pipe(writeStream).on('close', () => callback(null));
    });
};

3. 额外排查点

确认你创建的pictures文件夹和代码文件在同一级目录,且运行Node进程的用户对该文件夹有读写权限,Linux/macOS环境下权限不足也会触发同类报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:45:02