当前位置: 首页 > 知识库问答 >
问题:

无法使用java访问服务帐户google drive中文件的getWebContentLink()属性

松雅昶
2023-03-14

我在google drive中创建了一个服务帐户,用于从服务器上传google drive中的文件,并在以后下载这些文件。但是当我试图获取文件夹的文件列表并获取这些文件的WebContentLinks时,它返回了null。我检查了它的其他一些属性,除了文件名和文件ID之外,getWebContentLink()getWebViewLink()都返回null。

有人能帮我获得WebContentLink吗?或者你能找出为什么我不能获得WebContentLink的问题。

下面是我尝试的一部分代码:

  List<String> linkList=new ArrayList<String>();
  fileFlag=0;
  pageToken = null;
  do {
      driveFiles = service.files().list()
              .setQ("mimeType!='application/vnd.google-apps.folder and "+childFolder.getId()+"' in parents ")
              .setSpaces("drive")
              .setFields("nextPageToken, files(id, name)")
              .setPageToken(pageToken)
              .execute();
      System.out.println("\n\nFile No. : "+driveFiles.getFiles().size());
      for(com.google.api.services.drive.model.File file: driveFiles.getFiles()) {
         linkList.add(file.getWebContentLink());
         System.out.println(file.getName());
         System.out.println("File Link : "+file.getWebContentLink());
         System.out.println(file.getId());
         System.out.println(file.getWebViewLink());
      }
      pageToken = driveFiles.getNextPageToken();
  } while (pageToken != null);

下面是一个输出

File No. : 4
V2__data.sql
File Link : null
0BzCRyzakN8eJOGRTODhXTFkxUWc
null
V1__table.sql
File Link : null
0BzCRyzakN8eJT09BbG5JUFdNYmc
null
V2__data.sql
File Link : null
0BzCRyzakN8eJa0FyUGw3UFZJZ00
null
V1__table.sql
File Link : null
0BzCRyzakN8eJcDJNWHY4cFNHMW8
null

共有1个答案

苏鹏鹍
2023-03-14

正如@pinoyyid评论的那样,在drive查询的setFields属性中添加webContentLink解决了这个问题。

  List<String> linkList=new ArrayList<String>();
  fileFlag=0;
  pageToken = null;
  do {
      driveFiles = service.files().list()
              .setQ("mimeType!='application/vnd.google-apps.folder' and '"+childFolder.getId()+"' in parents ")
              .setSpaces("drive")
              .setFields("nextPageToken, files(id, name, webContentLink)")
              .setPageToken(pageToken)
              .execute();
      System.out.println("\n\nFile No. : "+driveFiles.getFiles().size());
      for(com.google.api.services.drive.model.File file: driveFiles.getFiles()) {
         linkList.add(file.getWebContentLink());
         System.out.println(file.getName());
         System.out.println("File Link : "+file.getWebContentLink());
         System.out.println(file.getId());
         System.out.println(file.getWebViewLink());
      }
      pageToken = driveFiles.getNextPageToken();
  } while (pageToken != null);
 类似资料:
  • 我正在工作上传文件在谷歌驱动器与服务帐户,我能够插入文件在谷歌驱动器,但我不能查看该文件在谷歌驱动器。 我是创建abc@gmail.com。用abc@gmail.com创建一个服务帐户。有了P12证书和服务客户端电子邮件id,我可以在驱动器中插入文件。但无法在abc@gmail.com的谷歌驱动器上看到该文件。当fatch从应用程序中的文件列表时,它将显示5个文件,但在我的abc@gmail.co

  • 我有一个G套件域,并用域范围的授权打开一个服务号。服务号在项目中也有所有者身份。我启用gmail应用编程接口并添加范围参考(https://developers.google.com/admin-sdk/directory/v1/guides/delegation“将域范围的权限委托给您的服务号”)我也启用不太安全的应用程序设置。 这是我的代码: 但是当我使用这个令牌尝试列出电子邮件时:GETht

  • 我试图创建一个nodejs应用程序,可以准备我的GoogleDrive文件。我不想要一个每个人都可以使用的应用程序,它只是特定于我的谷歌驱动。 我在控制台中为GoogleDrive创建了一个api密钥,没有任何限制。 这是我正在做的电话:https://www.googleapis.com/drive/v3/files?pageSize=10 当使用这个键我得到这个错误: 这在谷歌硬盘上可能吗?

  • 我正在尝试使用Google Directory API验证组成员,但每次我发出请求时都无法通过403错误。 我使用的是一个服务帐户,我为它启用了“启用G套件域范围委托”选项。我还使用套件中的客户端ID添加了“https://www.googleapis.com/auth/admin.directory.user,https://www.googleapis.com/auth/admin.direc

  • 我想使用gsutil和服务帐户在命令行上访问Goolge播放报告。有一个云存储URI,格式为gs://bucket\u name,我可以用我的用户帐户列出和下载报告,但不能用我创建的服务帐户。错误总是相同的: 我已向服务帐户授予了所有必需的权限,因此我不明白为什么用户帐户可以使用,而服务帐户却无法使用。 所以如果你知道如何帮助我,我会非常感谢你。

  • 我无法使用服务帐户插入google drive。相反,我可以使用相同的服务帐户从google drive下载和更新文件,而不会出现任何问题。我通过转到[我的项目]从特定用户(我们称之为用户“X”)的帐户中创建了服务帐户- 然后,我专门转到用户“X”的MyDrive上的一个文件夹,并将该文件夹与OAuth2的“创建新客户端ID”步骤生成的服务帐户电子邮件地址共享。我确保指定该文件夹的服务帐户权限为“