相关疑难解决方法(0)

Google Drive api范围和文件访问权限(drive vs drive.files)

我为我创建了两个刷新令牌:一个用于

SCOPE = 'https://www.googleapis.com/auth/drive'
Run Code Online (Sandbox Code Playgroud)

和另一个

SCOPE = 'https://www.googleapis.com/auth/drive.file'
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取有关文件的信息(使用get方法)我在使用SCOPE drive.files时可以获得一些文件,有些只在使用更宽范围的驱动器时获得

但我无法弄清楚是什么原因造成的?文件位于不同的文件夹中,但有一个共享的根文件夹.

google-api google-api-client google-drive-api

10
推荐指数
2
解决办法
1万
查看次数

如何使用Google Picker使用"drive.file"范围访问文件?

我的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); …
Run Code Online (Sandbox Code Playgroud)

html javascript google-drive-api google-picker

6
推荐指数
2
解决办法
4833
查看次数