使用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é
相关产品推荐
相关产品推荐

