【发布时间】:2020-08-10 10:59:07
【问题描述】:
我想使用 java 将文件上传到共享驱动器。 我创建了一个服务帐户,并与服务帐户的地址共享了共享驱动器(名称为 DB-Drive)。
全局变量
private static HttpTransport httpTransport;
private static Drive drive;
主函数(初始化和列出文件)
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
Credential credential = authorize();
drive = new Drive.Builder(httpTransport, JacksonFactory.getDefaultInstance(), credential).setApplicationName(
"Quickstart").build();
uploadFile();
FileList result = drive.files().list().execute();
List<File> files = result.getFiles();
if (result == null || result.isEmpty()) {
System.out.println("No files found.");
} else {
System.out.println("Files:");
for (File file : files) {
System.out.printf("%s %s \n", file.getName(),file.getId());
}
}
}
授权码
GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("resources/credentials.json"))
.createScoped(Collections.singleton(DriveScopes.DRIVE_FILE));
return credential;
上传代码
String folderId = "***DB-Drive id****";
File fileMetadata = new File();
fileMetadata.setName("photo.jpg");
fileMetadata.setParents(Collections.singletonList(folderId));
java.io.File filePath = new java.io.File("/home/*****/Downloads/qck_1552369371.jpeg");
FileContent mediaContent = new FileContent("image/jpeg", filePath);
File file = drive.files().create(fileMetadata, mediaContent)
.setFields("id, parents")
.execute();
System.out.println("File ID: " + file.getId());
return file;
我正在将作为团队驱动器或共享驱动器的 DB-Drive 设置为上传文件的父级,但我仍然无法在共享驱动器文件夹中查看它。请帮我解决这个问题。
我正在添加完整的流程:-
1.) 我使用https://developers.google.com/identity/protocols/oauth2/service-account 中提到的步骤创建服务帐户 我选择了项目并给出了描述和所有内容。
2.) 我没有将域级别委派给服务帐户,而是将数据库驱动器(团队驱动器)与服务帐户地址共享(在 credentials.json 文件中作为 client_email *****.gserviceaccount 提到.com)
3.) 然后我使用上面的代码上传文件,要求服务帐户通过将 DB-Drive 的 id 指定为文件的父 id 将文件上传到共享驱动器,即 DB-Drive。
4.) 但文件仍在上传到服务帐户的驱动器,它没有链接到共享驱动器。
5.) DB-Drive 是父文件夹(唯一的文件夹)。
任何线索都会有很大帮助。
【问题讨论】:
-
查看您的完整代码,包括将服务帐户创建代码与您的代码合并会有所帮助,尤其是
drive的定义。 -
我希望现在一切都清楚了@ziganotschka。
-
我相信你的错误来自于你没有定义
supportsAllDrives=true。请通过Try this API 在没有服务帐户的情况下对其进行测试。 -
Java 客户端具有用于 file.create 功能的 setSupportsTeamDrives 选项。我没有找到这个属性supportsAllDrives。
-
请看here。
标签: java file-upload google-drive-api service-accounts google-drive-shared-drive