2

我第一次尝试使用 Google API,Google Drive API,我正在使用 Google SignIn 对用户进行身份验证。我在启用 Google Drive API 后创建了 ClientId、ClientSecret 和 Scope,但我不知道如何使用它们。我最终使用 GoogleSignInAccount 的 authHeaders 创建了一个 HTTP 客户端。

我不需要访问或管理我的文件,我只需要经过身份验证,因为我可能需要下载大文件,使用直接链接不起作用,因为它有一个无法扫描的大文件的确认窗口.

当我尝试使用它的 ID 下载公共文件时,我总是收到以下错误。

class GoogleHttpClient extends IOClient {
  Map<String, String> _headers;

  GoogleHttpClient(this._headers) : super();

  @override
  Future<IOStreamedResponse> send(BaseRequest request) =>
      super.send(request..headers.addAll(_headers));

  @override
  Future<Response> head(Object url, {Map<String, String> headers}) =>
      super.head(url, headers: headers..addAll(_headers));

}

class GDriveHelper {

  // NOT USING
  //static final clientId = "??????.apps.googleusercontent.com";
  //static final clientSecret = "??????";
  //static final scopes = [ga.DriveApi.DriveFileScope];

  static UserController userController = Get.find();

  static Future<void> download(String fileId) async {

    Map<String, String> headers = await userController.googleSignInAccount.authHeaders;

    var client = GoogleHttpClient(headers);
    var drive = ga.DriveApi(client);

    await drive.files.get(fileId).then((file){

      print("FILE: $file");

    });



  }

}

当我调用该方法时,出现此错误:

await GDriveHelper.download(fileId);
            
DetailedApiRequestError(status: 403, message: Insufficient Permission: Request had insufficient authentication scopes.)
4

1 回答 1

4

根据您的问题,我可以理解您尝试下载公开共享的文件。从我们的讨论中,我确认了clientId,clientSecret并且scopes没有被使用。从这些情况来看,作为一种简单的方法,我建议使用 API 密钥下载公共共享文件。API 密钥可以下载公开共享的文件。请求可以简单如下。

样品要求:

GET https://www.googleapis.com/drive/v3/files/[FILEID]?alt=media&key=[YOUR_API_KEY]
  • 在这种方法中,除了Google Docs(Document、Spreadsheet、Slides等)之外的文件可以通过Drive API中的“Files:get”方法下载。

  • 当您要下载 Google Docs 文件时,请使用“文件:导出”的方法,如下所示。

      GET https://www.googleapis.com/drive/v3/files/[FILEID]/export?mimeType=[mimeType]&key=[YOUR_API_KEY]
    

示例 curl 命令:

作为测试,当您使用 curl 时,示例 curl 命令如下所示。

除 Google Docs 文件外的文件:
curl "https://www.googleapis.com/drive/v3/files/[FILEID]?alt=media&key=[YOUR_API_KEY]"
谷歌文档文件:
curl "https://www.googleapis.com/drive/v3/files/[FILEID]/export?mimeType=[mimeType]&key=[YOUR_API_KEY]"

参考:

于 2020-08-26T03:02:01.977 回答