我正在使用客户端js Google Drive API,但我似乎无法读取/下载同一api之前创建的文本文件。
我在files / fileID和webContentLink url上都尝试了files.get,手动请求和google请求。
webContentLink可以正常工作,即使我在浏览器中打开但未通过请求打开,即使我在浏览器中被授权(存在cookie)并在请求中发送令牌(URL和标头)。
fileId
wcLink = webContentLink
oToken = oauthToken
Test1
Google在webContentLink上的请求
未找到返回404
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()
似乎我的上传代码无法正常工作,正在创建一个空文件。
我已经手动向其中添加了内容,现在可以在测试2(原始),3(作为响应)和4(作为响应)中正确检索它的内容