Java 如何使用服务帐号将文件夹创建到共享云端硬盘中进行身份验证



我有一个问题,找不到id文件夹,我想在我之前准备好的文件夹中创建文件到共享驱动器中,这是我的代码

public static void main (String[]args) throws GeneralSecurityException, IOException {
Drive service = CreateFolder.createService();
try {
String key = "1kM_fdJek3b4sErr_xxx";
File fileMetadata = new File();
fileMetadata.setName("invoice");
fileMetadata.setParents(Collections.singletonList(key));
fileMetadata.setMimeType("application/vnd.google-apps.folder");

File file = service.files().create(fileMetadata)
.setFields("id , parents").execute();

System.out.println("folder successfully created by id " + file.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
@SuppressWarnings("deprecation")
private static Drive createService() throws GeneralSecurityException, IOException {
final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
GoogleCredential credential = new  GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("my-email-id")
.setServiceAccountScopes(SCOPES)
.setServiceAccountPrivateKeyFromP12File(new java.io.File("privateKey.p12"))
.build();

return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME).build();
}

这是文件夹1kM_fdJek3b4sErr_xxx密钥,我正在使用服务帐户进行授权,这是我的私钥文件privateKey.p12。 我的电子邮件 ID 已被授予访问共享云端硬盘的权限(我的电子邮件 ID 是内容管理器(。但我遇到一个问题,找不到文件夹 ID,如下面的消息

{  
"code" : 404,
"errors" : [ {
"domain" : "global",
"location" : "fileId",
"locationType" : "parameter",
"message" : "File not found: 1kM_fdJek3b4sErr_xxx.",
"reason" : "notFound"
} ],
"message" : "File not found: 1kM_fdJek3b4sErr_xxx."
}

我需要帮助才能在共享云端硬盘中包含的文件夹中创建文件

我的电子邮件 ID 已被授予访问共享云端硬盘的权限(我的电子邮件 ID 是内容管理器(。但是我遇到一个问题,找不到文件夹 ID,如下面的消息

服务帐户不是您。 服务帐户是它自己的虚拟用户,它有自己的驱动器帐户。 授予自己对共享云端硬盘的访问权限并不表示服务帐号可以访问该共享云端硬盘。 通过获取服务帐户电子邮件地址并向其授予对文件夹的权限,与服务帐户共享文件夹。然后,它将能够看到该文件夹。

我从这个链接获取信息 https://developers.google.com/drive/api/v3/enable-shareddrives

添加此代码

.setSupportsTeamDrives(true)

此完整代码

File file = service.files().create(fileMetadata)
.setSupportsTeamDrives(true)
.setFields("id , parents").execute();

相关内容

最新更新