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

使用Google Drive API上传文件遇ENOENT错误:文件存同目录却无法读取

解决Node.js读取文件时的ENOENT错误(Google Drive API上传场景)

这个ENOENT: no such file or directory错误是Node.js里很常见的路径问题,核心原因通常是相对路径的解析基于Node.js的运行工作目录,而不是脚本文件所在目录,咱们一步步来排查和解决:

1. 先确认当前工作目录

首先在你的insertDrive函数开头加一行代码,打印Node.js的工作目录:

console.log("当前Node.js工作目录:", process.cwd());

运行脚本后看输出,如果打印的不是你的folder目录(也就是birds.mp3和quickstart.js所在的目录),那问题就找到了——比如你可能在folder的上级目录执行node folder/quickstart.js,这时候./birds.mp3会去上级目录找,自然找不到文件。

2. 使用脚本所在目录的绝对路径(最可靠的解决方案)

不要依赖相对路径,改用__dirname(Node.js内置变量,代表当前脚本文件所在目录的绝对路径)来拼接文件路径,这样不管你在哪里运行脚本,路径都是准确的:

首先记得先引入path模块(如果还没引入的话):

const fs = require('fs');
const path = require('path'); // 新增这一行

然后修改media部分的代码:

// 拼接出birds.mp3的绝对路径
const audioFilePath = path.join(__dirname, 'birds.mp3');

var media = {
 mimeType: 'audio/*',
 body: fs.createReadStream(audioFilePath)
};

__dirname会指向quickstart.js所在的folder目录,和birds.mp3拼接后就是准确的绝对路径,彻底避免工作目录的影响。

3. 额外的调试和检查点

  • 检查文件名大小写:如果是在Linux/macOS环境下,文件名是区分大小写的,确认你的代码里写的birds.mp3和实际文件名完全一致(比如不要写成Birds.mp3)。
  • 验证文件存在性:可以在读取文件前先检查文件是否存在,方便快速定位问题:
const audioFilePath = path.join(__dirname, 'birds.mp3');
if (!fs.existsSync(audioFilePath)) {
  console.error("错误:文件不存在,路径为:", audioFilePath);
  return; // 提前终止,避免后续报错
}
  • 检查文件权限:确保运行Node.js的用户对birds.mp3有读取权限,比如在Linux下可以用chmod +r birds.mp3赋予读权限。

内容的提问来源于stack exchange,提问作者Diagathe Josué

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:05:18