Flutter-如何使用Google Drive API下载公共文件 样品请求:示例curl命令:参考文献:

问题描述

我正在尝试首次使用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.)

解决方法

根据您的问题,我可以理解您尝试下载公开共享的文件。从我们的讨论中,我确认未使用clientIdclientSecretscopes。考虑到这些情况,作为一种简单的方法,我想建议使用API​​密钥下载公共共享文件。 API密钥可以下载公共共享的文件。请求可以很简单,如下所示。

样品请求:

GET https://www.googleapis.com/drive/v3/files/[FILEID]?alt=media&key=[YOUR_API_KEY]
  • 通过这种方法,the method of "Files: get"可以在Drive API中下载Google文档以外的文件(文档,电子表格,幻灯片等)。

  • 要下载Google Docs文件时,请按以下方式使用the method of "Files: export"

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

示例curl命令:

作为测试,使用curl时,sample curl命令如下。

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

参考文献:

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...