我正在使用最新的Java SDK for Google Drive(1.9.0 rev 155),我已设法使其上传文件,列出文件,创建目录(令人惊讶的难度)以及其他各种各样的东西。
但是我上传的内容在Web界面中是不可见的,类似地,Web界面中的内容对我的代码是不可见的。代码是这样的:
public final class Main
{
private static final String APPLICATION_NAME = "java7-fs-gdrive";
private static final JsonFactory JSON_FACTORY
= JacksonFactory.getDefaultInstance();
private static final Path SECRETS_FILE;
static {
final String home = System.getProperty("user.home");
if (home == null)
throw new ExceptionInInitializerError("user.home not defined???");
final Path clientSecrets
= Paths.get(home, ".gdrive/clientSecrets.json");
try {
SECRETS_FILE = clientSecrets.toRealPath();
} catch (IOException e) {
throw new ExceptionInInitializerError(e);
}
}
private Main()
{
throw new Error("nice try!");
}
public static void main(final String... args)
throws GeneralSecurityException, IOException
{
final NetHttpTransport transport
= GoogleNetHttpTransport.newTrustedTransport();
final GoogleCredential credential;
try (
final InputStream in = Files.newInputStream(SECRETS_FILE);
) {
credential = GoogleCredential.fromStream(in, transport,
JSON_FACTORY).createScoped(ImmutableList.of(DriveScopes.DRIVE));
}
final Drive drive = new Drive.Builder(transport, JSON_FACTORY,
credential).setApplicationName(APPLICATION_NAME).build();
final Drive.Files files = drive.files();
final Drive.Files.List list = files.list();
final FileList fileList = list.execute();
final List<File> items = fileList.getItems();
for (final File item: items) {
System.out.println(item.getTitle());
System.out.println(item.getId());
System.out.println(item.getKind());
}
}
}
好的,所以,从开发者控制台,我使用的是“服务帐户”凭证文件。还有“Web应用程序的客户端ID”。经过许多阅读开发者网站的访问(以及SO问题/答案)后,我仍然无法弄清楚两者之间的差异,仍然无法弄清楚如何“在网络用户界面上”修改文件。
那么,我该怎么办?
答案 0 :(得分:2)
服务帐户不您。它是自己的实体,将其视为Google云端硬盘上的用户。它没有Web版本的Google驱动器,因为它不是真正的人,所以没有登录。它确实有自己的驱动器帐户,Google日历和其他一些东西。如果你想能够看到它拥有的文件,我认为有一些选择。
首先将选项上传到您自己的帐户。
转到Google云端硬盘用户界面。创建一个目录。获取服务帐户的电子邮件地址,并像访问任何其他用户一样授予其访问权限。然后运行服务帐户。如果它有效,它应该可以访问这个新目录,然后你可以上传到那个目录。
第二种选择。
让服务帐户授予您访问其目录结构的权限。可能使用Permissions: insert来获取您的电子邮件地址并授予其访问服务帐户目录的权限。
注意我没有使用驱动器对此进行测试,但我已将其用于Google Analytics和Google日历。我可能只是为了它的乐趣而尝试它。另外,我不是Java程序员,因此无法真正帮助它实现它。我真的不认为这是一个Java问题,更多的是服务帐户设置问题:)
答案 1 :(得分:1)
如何使Google Drive Java SDK读取/写入“我的云端硬盘”
正如@DaImTo指出的那样,“服务帐户”不是“我的驱动器”。虽然建议的共享解决方案可能有效,但它(笨拙)笨拙且难以维护。
如果您希望自己的应用能够直接访问“我的云端硬盘”,那么只需要
此处列出了步骤1 How do I authorise an app (web or installed) without user intervention? (canonical ?)
第2步是标准的Google Oauth,描述为https://developers.google.com/accounts/docs/OAuth2WebServer#refresh
第3步是标准云端硬盘,例如https://developers.google.com/drive/v2/reference/files/get#try-it