【问题标题】:Downloading 'App data' files from Google Drive using the Android Drive SDK使用 Android Drive SDK 从 Google Drive 下载“应用数据”文件
【发布时间】:2013-03-29 22:24:14
【问题描述】:

我已经启动并运行了适用于 android 的 google drive sdk 快速启动。

我要做的是扩展应用程序,以便能够在驱动器新的“App Data”文件夹上上传文件,并能够再次下载该文件(在 android 设备之间同步配置文件)

上传文件可以正常工作。但是当我尝试下载同一个文件时,我可以获得它的元数据,如 fileID、fileTitle、fileDownloadURL 等,但无法下载内容。我在尝试时收到 401 Unauthorized 错误。

我正在使用 AUTH SCOPE "https://www.googleapis.com/auth/drive.appdata" 来访问 appdata。

知道为什么会这样吗?

【问题讨论】:

  • 这听起来像一个错误,让我尝试重现。
  • 您是否将访问令牌附加到下载请求中?您能否编辑问题以更深入地了解您的实施?

标签: android google-drive-api


【解决方案1】:

仅使用drive.appdata 范围时,我可以重现这一点。如果我添加另一个 Drive 范围,例如 drive.readonly 范围,它可以正常工作。

我同意这是一个错误(或至少是令人惊讶的行为),所以我会提出一个错误,但现在请使用上面的解决方法。

【讨论】:

  • 谢谢,我已经添加了只读范围,它现在可以按预期工作了。
【解决方案2】:

尝试以下代码检索内容

public void retrieveContents(DriveFile file) {
        // [START drive_android_open_file]
        Task<DriveContents> openFileTask =
                getDriveResourceClient().openFile(file, DriveFile.MODE_READ_ONLY);
        // [END drive_android_open_file]
        // [START drive_android_read_contents]


        openFileTask.continueWithTask(new Continuation<DriveContents, Task<Void>>() {
            @Override
            public Task<Void> then(@NonNull Task<DriveContents> task) throws Exception {
                DriveContents contents = task.getResult();
                // Process contents...
                // [START_EXCLUDE]
                // [START drive_android_read_as_string]
                try (BufferedReader reader = new BufferedReader(
                        new InputStreamReader(contents.getInputStream()))) {
                    StringBuilder builder = new StringBuilder();
                    String line;
                    while ((line = reader.readLine()) != null) {
                        builder.append(line).append("\n");
                    }

                    Log.e("result ", builder.toString());
                }
                // [END drive_android_read_as_string]
                // [END_EXCLUDE]
                // [START drive_android_discard_contents]
                Task<Void> discardTask = MainActivity.this.getDriveResourceClient().discardContents(contents);
                // [END drive_android_discard_contents]
                return discardTask;
            }
        })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {

                    }
                });

        // [END drive_android_read_contents]
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多