我想将Google云端硬盘集成到我们的网络应用程序中。因此,每个用户都可以将他的Google云端硬盘存储空间连接到我们的应用程为此目的,正确的授权方式是什么?
OAuth正确吗?我知道要在开发者控制台中创建凭据,但如何将google凭据与我们的帐户相关联,存储并在以后上传文件时使用?
我希望在OAuth登录后与用户的云端硬盘写入/读取文件。
这是我的代码,它使用的是服务凭据。我知道这是错误的方式。
public class GDManager {
private static String accountId = "xxx@developer.gserviceaccount.com";
private static String p12File = "file.p12";
private static GoogleCredential buildCredential(HttpTransport httpTransport, JsonFactory jsonFactory) throws GeneralSecurityException, IOException {
// Build service account credential.
return new GoogleCredential.Builder().setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(accountId)
.setServiceAccountScopes(Collections.singleton(DriveScopes.DRIVE))
.setServiceAccountPrivateKeyFromP12File(new java.io.File(GDManager.class.getClassLoader().getResource(p12File).getFile()))
.build();
}
private static Drive init() {
try {
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
GoogleCredential credential = buildCredential(httpTransport, jsonFactory);
return new Drive.Builder(
httpTransport, jsonFactory, credential)
.setApplicationName("Google drive test")
.build();
} catch (GeneralSecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws IOException {
Drive service = init();
String parentId = null;
String mimeType = "text/plain";
File body = new File();
body.setTitle("test");
body.setDescription("description");
body.setMimeType(mimeType);
if (parentId != null && parentId.length() > 0) {
body.setParents(
Arrays.asList(new ParentReference().setId(parentId)));
}
java.io.File fileContent = new java.io.File("/home/michal/Downloads/google_drive");
FileContent mediaContent = new FileContent(mimeType, fileContent);
try {
File file = service.files().insert(body, mediaContent).execute();
System.out.println(file);
} catch (IOException e) {
System.out.println("An error occured: " + e);
}
}
}
答案 0 :(得分:1)
您无法通过静态主方法对此进行测试,您需要将其集成到Web应用程序中。 OAuth身份验证要求您将用户的浏览器会话重定向到Google云端硬盘网址以进行授权。请查看此页面,了解如何执行此操作:https://developers.google.com/drive/web/credentials?hl=en。请注意,当您在未经授权的情况下调用getCredentials时,会抛出异常并且这包含您必须将用户的浏览器重定向到的授权URL才能获取授权代码,然后您可以使用该代码交换访问令牌,然后您可以使用访问Google云端硬盘上的文件。