Jak*_*kob 6 html javascript google-drive-api google-picker
我的Google Drive集成Web应用程序可以在drive范围内正常运行,但除非必要,否则使用如此广泛的范围是不好的做法.我想限制范围,drive.file以便我只能访问由应用程序创建的文件和使用Google Picker打开的文件,但我无法使其工作.
可以毫无问题地打开应用程序创建的文件.但是,使用Google Picker打开的文件无法访问; 尝试下载此类文件会导致404错误.当我右键单击Google云端硬盘中的文件并选择"查看授权的应用"时,我的应用程序未被列为授权应用之一.
如果范围扩展到,则代码可以正常工作drive.
我编写了一个最小的测试页面,该页面应该下载用户在Google Picker中选择的文件.可以通过调用auth()后跟来启动该过程showPicker().代码的关键部分如下:
gapi.auth.authorize({
client_id: '123456789012.apps.googleusercontent.com',
scope: 'https://www.googleapis.com/auth/drive.file',
immediate: false
});
...
var picker = new google.picker.PickerBuilder()
.setAppId('123456789012')
.addView(new google.picker.DocsView(google.picker.ViewId.DOCS_IMAGES))
.setOAuthToken(gapi.auth.getToken().access_token)
.setCallback(onPickerAction)
.build();
picker.setVisible(true);
...
function onPickerAction(data) {
if ( data.action === google.picker.Action.PICKED ) {
var id = data.docs[0].id;
var request = new XMLHttpRequest();
request.open('GET', 'https://www.googleapis.com/drive/v2/files/' + id);
request.setRequestHeader('Authorization', 'Bearer ' + gapi.auth.getToken().access_token);
request.addEventListener('load', function() {
var item = JSON.parse(request.responseText);
console.log(item);
});
request.send();
}
}
Run Code Online (Sandbox Code Playgroud)
一个相关的问题得出结论,应用程序ID设置不正确.这似乎不会影响我; 我已经测试了所有我能想到的组合而没有任何运气.
OP 的回答中提到的 Google+ plus 对话对我来说是关键。必须正确配置许多内容才能使其正常工作:
上面的一部分可能有效,但这就是我需要设置的,以便对所选文件进行简单的 REST 请求返回 200 而不是 404。
正如Google+ 对话中首先建议的那样,该问题可以通过以下方式解决: