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