为什么 fs.createWriteStream 会抛出"Error: ENOENT: no such file or directory"错误?



代码如下:

const dest = fs.createWriteStream('./src/Pages/downloads/' + fileName + '.' + type)
await drive.files.export({
fileId: fileId, mimeType: newType}, 
{responseType: 'stream'},
function(err, response){
if(err)return console.log(err);
response.data.on('error', err => {
console.log("Found at 911 " + err);
})
.pipe(dest, function(){console.log('file path written.')})
.on('end', ()=>{
console.log("sent file.")
})
});

有几件事需要解释。

  1. 这是在一个post请求中,从google驱动器文件中获取几个变量,例如其名称,id和mime类型。这些是文件名和";type"在WriteStream请求中显示的变量。它们已经是预定义的,不是问题所在。因此,为了解决这个问题,假设变量是var fileName = test、var type = pdf和var newType = "application/pdf"
  2. Drive .files.export函数是对Google Drive api的异步调用,用于查找具有"fileid"中指定id的文件/文件夹/项目。然后输出。我在这里想要实现的是将适合该特定id的文件导出到dest定义的WriteStream中。
  3. "。/src/Pages/downloads/'路径不存在。显然,特定文件(对于测试用例,我们说test.pdf)还没有,但这就是为什么我使用createWriteStream。
  4. 我已经尝试更改路径从'。/src/Pages/downloads/'到__dirname + "/src/Pages/downloads"并出现以下相同的错误。

说了这么多,我得到了一个错误,看起来像这样:

错误:enent:没有这样的文件或目录,打开'./src/Pages/downloads/test.pdf在WriteStream上触发'error'事件/fs/streams.js:375:14

此错误发生在const dest = fs.createWriteStream(…)事件。有人能解释一下这是怎么回事吗?非常感谢。谢谢你!

在我的情况下,最后我发现这是因为文件名不正确,它包含:

我的系统是windows。

在我的例子中,路径是相对的(即"./tmp_folder/1.txt")而不是完整的路径(即"/Users/name/project_name/tmp_folder/1.txt")。

:

fs.createWriteStream(path.join('./tmp_folder', fileName), { encoding: 'utf8' });

转到这个(__dirname是不同的):

fs.createWriteStream(path.join(__dirname, './tmp_folder', fileName), { encoding: 'utf8' });

相关内容

最新更新