使用 Java 和 Google Drive API V3 将文件上传到共享的 Google Drive 位置?

Posted

技术标签:

【中文标题】使用 Java 和 Google Drive API V3 将文件上传到共享的 Google Drive 位置?【英文标题】:Upload a file to shared google drive location using Java with Google Drive API V3? 【发布时间】:2020-07-22 12:48:14 【问题描述】:

我需要使用 Java 将文件上传到共享的 Google Drive 位置(不属于我,而是与我共享)。使用Drive APIs,我们可以将文件上传到用户拥有的驱动器位置,但还没有找到任何解决方案来允许上传到共享位置。用例类似于应用程序的不同用户需要将文件上传到共享的 Google Drive 位置。关于此主题的其他问题很少(即this),但没有一个有正确的答案。如果可能,请提供帮助,或者请告知无法以编程方式实现此目标。

【问题讨论】:

根据the documentation,您需要添加查询参数supportsAllDrives=true才能从Drive API访问、上传、列出或创建共享驱动器。也许this Stack Overflow solution 可以更好地阐明这一点。 让我知道这是否有效或您是否需要更多信息。 @MateoRandwolf 我会告诉你的。非常感谢 @MateoRandwolf,它起作用了,实际上按照这个documentation,他们将弃用这个参数,可能是因为这个原因,他们在他们的java apis中默认支持它。所以实际上,我什么都不用做。 :) 【参考方案1】:

我在评论者@MateoRandwolf 的帮助下找到了解决方案,因此发布了答案。希望对你有帮助。。

根据documentation,supportsAllDrives=true 参数通知 Google Drive,您的应用程序旨在处理共享驱动器上的文件。但也提到supportsAllDrives参数有效期至2020年6月1日。2020年6月1日之后,假设所有应用程序都支持共享驱动器。因此,我尝试使用 Google Drive V3 Java API,发现当前在 V3 API 的 Drive.Files.Create 类的 execute 方法中默认支持共享驱动器。附上示例代码 sn-p 供其他人参考。这个方法uploadFile使用直接上传的方式将文件上传到谷歌驱动文件夹,并返回上传的fileId。

public static String uploadFile(Drive drive, String folderId) throws IOException 

    /*
    * drive: an instance of com.google.api.services.drive.Drive class
    * folderId: The id of the folder where you want to upload the file, It can be
    * located in 'My Drive' section or 'Shared with me' shared drive with proper 
    * permissions.
    * */

    File fileMetadata = new File();
    fileMetadata.setName("photo.jpg");
    fileMetadata.setParents(Collections.singletonList(folderId));
    java.io.File filePath = new java.io.File("files/photo.jpg");
    FileContent mediaContent = new FileContent("image/jpeg", filePath);

    File file = drive.files().create(fileMetadata, mediaContent)
                                    .setFields("id")
                                    .execute();
    System.out.println("File ID: " + file.getId());
    return file.getId();

【讨论】:

以上是关于使用 Java 和 Google Drive API V3 将文件上传到共享的 Google Drive 位置?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Google Drive API(Java 客户端)对应用程序进行单元测试

在 Google Drive 中使用 Google Spreadsheets API 创建电子表格

如何从 Google Drive 上传和下载文件(使用 Rest Api v3)

google drive Oauth 2.0 for java web application

使用 Google Drive Oauth 2.0 管理访问令牌

尝试保存凭据时,使用Google Drive API库和Play with Java会冻结/锁定应用程序