Google Drive API无法下载包含files.get,request或google request的文件

问题描述 投票:0回答:1

我正在使用客户端js Google Drive API,但我似乎无法读取/下载同一api之前创建的文本文件。

我在files / fileID和webContentLink url上都尝试了files.get,手动请求和google请求。

webContentLink可以正常工作,即使我在浏览器中打开但未通过请求打开,即使我在浏览器中被授权(存在cookie)并在请求中发送令牌(URL和标头)。

fileId
wcLink = webContentLink
oToken = oauthToken

Test1

Google在webContentLink上的请求

未找到返回404

通话https://drive.google.com/static/proxy.html?usegapi=1&jsh=m;//scs/apps-static//js/k=oz.gapi.en.jw7XZHvcak8.O/am=wQE/d=1/ct=zgms/rs=AGLTcCOXtLG11kt9d673FzpjO_GiLUGIQA/m=features

let r = gapi.client.request({
    'path': wcLink,
    'method': 'GET',
    'params': {'fileId': fileId, 'alt': 'media'},
    'headers': {'Authorization': 'Bearer ' + oToken }
})
r.execute((response,rawData)=>{ //callback not called at all
    console.log('resp',response)
    console.log('raw',rawData)
})

Test2

Google对files / fileId的请求,使用.execute

返回200 OK,响应未定义,并且raw的内容为空,内容长度为0

let r = gapi.client.request({
    'path': 'https://www.googleapis.com/drive/v3/files/'+fileId,
    'method': 'GET',
    'params': {'fileId': fileId, 'alt': 'media'},
    'headers': {'Authorization': 'Bearer ' + oToken }
})
r.execute((response,rawData)=>{
    console.log('resp',response) //undefined
    console.log('raw',rawData) //body:'', content-length:0
})

Test3

drive.files.get on fileId

返回200 OK,响应结果:false,正文:''

gapi.client.drive.files.get({
    'fileId': fileId,
    'alt': 'media'
})
.then((response,rawData)=>{
    console.log('resp',response) //result: false, body: ''
    console.log('raw',rawData) //undefined
})

Test4

Google对files / fileId的请求,使用.then

返回200 OK,响应结果:false,正文:''

gapi.client.request({
    'path': 'https://www.googleapis.com/drive/v3/files/'+fileId,
    'method': 'GET',
    'params': {'fileId': fileId, 'alt': 'media'},
    'headers': {'Authorization': 'Bearer ' + oToken }
})
.then((response,rawData)=>{
    console.log('resp',response) //result: false, body: ''
    console.log('raw',rawData) //undefined
})

Test5

http请求文件/ fileId

禁止返回403,CORS警告

var xhr = new XMLHttpRequest();
xhr.open('GET',
'https://www.googleapis.com/drive/v3/files/' + fileId +
'?alt=media&access_token=' + encodeURIComponent(oToken), true)
xhr.responseType = "blob"
xhr.onreadystatechange = ()=>{
    console.log('readyStateChange',xhr)
}
xhr.setRequestHeader('Authorization', 'Bearer ' + oToken)
xhr.send()

Test6

webContentLink上的http请求,链接中带有访问令牌

返回401未经授权,CORS警告

let reqUrl = wcLink + '&access_token=' + encodeURIComponent(oToken)
var xhr = new XMLHttpRequest()
xhr.open("GET", reqUrl, true)
xhr.responseType = "blob"
xhr.onreadystatechange = ()=>{
    console.log('readyStateChange',xhr)
}
xhr.setRequestHeader('Authorization', 'Bearer ' + oToken)
xhr.send()

Test7

webContentLink上的http请求,链接中没有访问令牌,没有responseType

我不明白这与上面的示例有什么不同,在上面的示例中,我同时在URL和标头中传递access_token并获得401未授权,但在这里我仅传递了标头并获得了200 ok ...

返回200 OK,CORS警告

let xhr = new XMLHttpRequest()
xhr.onreadystatechange = ()=>{
  console.log('response',xhr)
}
xhr.open('GET', wcLink, true)
xhr.setRequestHeader('Authorization', 'Bearer ' + oToken)
xhr.send()

整个响应:1 2,在“网络”选项卡中:3

javascript google-drive-api xmlhttprequest cors
1个回答
0
投票

似乎我的上传代码无法正常工作,正在创建一个空文件。

我已经手动向其中添加了内容,现在可以在测试2(原始),3(作为响应)和4(作为响应)中正确检索它的内容

© www.soinside.com 2019 - 2024. All rights reserved.