我正在尝试使用Node.js和请求模块从Google云端硬盘下载文件。 我从项目元数据的webContentLink区域获取下载链接,这些链接在我的浏览器中工作。
我的请求如下:
request.get({uri:item.webContentLink,headers:{authorization:'Bearer'+token}}).pipe(response);
我的回答是:
stream.js:79
dest.end();
^
TypeError: Object #<IncomingMessage> has no method 'end'
at Request.onend (stream.js:79:10)
at Request.EventEmitter.emit (events.js:117:20)
我使用的是https://github.com/google/google-api-nodejs-client/issues/150
中找到的方法非常感谢任何帮助。
**编辑完整代码
var request = require('request');
//getting children of folder
var url = "https://www.googleapis.com/drive/v2/files/"+id+"/children?maxResults=1000&q=trashed%3Dfalse&access_token="+token;;
request.get(url, function(err,response,body){
detailsParse = JSON.parse(body);
//if children are .mp3 then download
if(detailsParse.mimeType == 'audio/mpeg'){
var file = fs.createWriteStream("./"+detailsParse.title);
var getDown = "https://www.googleapis.com/drive/v2/files/"+detailsParse.id+"?access_token="+token;
request.get(getDown, function(err,response,body){
if(err){console.log(err)}
var downParse = JSON.parse(body);
request.get({uri:downParse.webContentLink,headers:{authorization:'Bearer'+token}}).pipe(response);
}
})
答案 0 :(得分:4)
好的,这对几个部分来说都是错误的。 首先将@fmodos传递给&#39;文件&#39;我之前创建的流。
然而,这并没有完全解决问题,因为我遇到了身份验证问题并且问题没有使用正确的端点,所以完整的答案在下面
var request = require('request');
//getting children of folder
var url = "https://www.googleapis.com/drive/v2/files/"+id+"/children?maxResults=1000&q=trashed%3Dfalse&access_token="+token;
request.get(url, function(err,response,body){
detailsParse = JSON.parse(body);
//if children are .mp3 then download
if(detailsParse.mimeType == 'audio/mpeg'){
var file = fs.createWriteStream("./"+detailsParse.title);
var getDown = "https://www.googleapis.com/drive/v2/files/"+detailsParse.id+"?access_token="+token;
request.get(getDown, function(err,response,body){
if(err){console.log(err)}
var downParse = JSON.parse(body);
//****THIS NEEDS TO BE THE downloadUrl ENDPOINT AND NOT THE webContentLink endpoint
//*****NOTICE THE SPACE AFTER Bearer WAS MISSING BEFORE
request.get({uri:downParse.downloadUrl,headers:{authorization:'Bearer '+token}}).pipe(response);
});
}
});
答案 1 :(得分:2)
这已经很老了,但我只是遇到了问题,我已经提供了一个示例,说明了如何使用Google API Node.js库实现这一点:https://gist.github.com/davestevens/6f376f220cc31b4a25cd
答案 2 :(得分:0)
您正在将请求响应传递给pipe
,而不是您创建的文件。
将代码.pipe(response);
更改为.pipe(file);