[英]How to make the Google Drive Java SDK read from/write to “my Drive” and not somewhere else?
我正在使用最新的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問題/答案)之后,我仍然無法弄清楚兩者之間的區別,仍然無法弄清楚如何“在網絡UI上”修改文件。
所以我該怎么做?
服務帳戶不是您。 它是自己的實體,將其視為Google雲端硬盤上的用戶。 它沒有Web版本的Google驅動器,因為它不是真正的人,所以沒有登錄。它確實有自己的驅動器帳戶,Google日歷和其他一些東西。 如果你想能夠看到它擁有的文件,我認為有一些選擇。
第一個選項上傳到您自己的帳戶。
轉到Google雲端硬盤用戶界面。 創建一個目錄。 獲取服務帳戶的電子郵件地址,並像訪問任何其他用戶一樣授予其訪問權限。 然后運行服務帳戶。 如果它工作,它應該有權訪問這個新目錄,然后你可以上傳到該目錄。
第二種選擇。
讓服務帳戶授予您訪問其目錄結構的權限。 可能使用權限:通過獲取您的電子郵件地址並允許其訪問服務帳戶目錄來插入。
請注意,我沒有使用驅動器對此進行測試,但我已將其用於Google Analytics和Google日歷。 我可能只是為了它的樂趣而嘗試它。 另外,我不是Java程序員,因此無法真正幫助它實現它。 我真的不認為這是一個Java問題,它更多的是一個服務帳戶設置問題:)
如何使Google Drive Java SDK讀取/寫入“my Drive”
正如@DaImTo指出的那樣,“服務帳戶”不是“我的驅動器”。 雖然建議的共享解決方案可能有效,但它(笨拙)笨拙且難以維護。
如果您希望您的應用能夠直接訪問“我的雲端硬盤”,那么它只需要
此處概述了步驟1 如何在沒有用戶干預的情況下授權應用程序(Web或已安裝)? (規范?)
第2步是標准的Google Oauth,描述了https://developers.google.com/accounts/docs/OAuth2WebServer#refresh
第3步是標准雲端硬盤,例如https://developers.google.com/drive/v2/reference/files/get#try-it
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.