为什么Javascript Google Drive API会将“false”作为回复返回?

时间:2017-01-27 02:20:45

标签: javascript google-drive-api google-client gapi

我正在使用Google Drive API v3来检索文件。我可以上传文件和列表文件,但files.get调用返回'false'。文档很稀疏(https://developers.google.com/drive/v3/reference/files/get

var contentRequest = gapi.client.drive.files.get({
    fileId: fileId,
    alt: 'media'
  });
  contentRequest.execute(function(resp) {
    console.log(resp); // resp = false
  });

如果我删除“alt:'media'”参数,那么我会按照文档中的描述获取元数据。我也尝试过使用:

gapi.client.request
    ( { 
    'path': '/drive/v3/files/'+fileId,
    'method': 'GET',
    'params': {'fileId': fileId, 'alt': 'media'},
    'headers': {'Authorization': 'Bearer ' + gapi.auth.getToken().access_token }
    }).execute(function(file) { 
         // file = false 
      }); 

我能找到的唯一希望的痕迹被埋没在Google Client REST API文档中,该文档说如果不是JSON可解析的,则响应为“false”。 https://developers.google.com/api-client-library/javascript/features/promises

文件类型似乎没有区别......到目前为止,我已经尝试过.html和.txt。

3 个答案:

答案 0 :(得分:1)

您需要使用回调的第二个参数 - 它应该包含原始响应。

request.execute(function(jsonResp, rawResp) {
    console.log('rawResp: ', rawResp);
    var respObject = JSON.parse(rawResp); // rawResp is encoded JSON string with header, body, etc.
    var respBody = respObject.gapiRequest.data.body; // in my case here it outputs the text of my txt file
});
  

请求成功或失败时执行的回调函数。 jsonResp包含解析为JSON的响应。如果响应不是JSON,则此字段将为false。 rawResp是HTTP响应。它是JSON,可以解析为包含正文,标题,状态和statusText字段的对象。

src:https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiclientrequest

P.S。很好的找到关于&#34的文档;而不是JSON-parseable"!它帮我解决了这个问题!

答案 1 :(得分:1)

在请求对象上调用execute时,我得到一个错误的响应。但是当打电话给"那么"它有效!

request.then(function(resp) {
   console.log(resp);
   console.log(resp.body); // The file content
});

答案 2 :(得分:0)

我相信这是您正在寻找的链接:)

https://developers.google.com/drive/v3/web/manage-downloads

  

下载文件要求用户至少具有读取权限。此外,您的应用必须使用允许读取文件内容的范围进行授权。例如,使用drive.readonly.metadata范围的应用程序无权下载文件内容。具有编辑权限的用户可以通过将viewersCanCopyContent字段设置为true来限制只读用户的下载。