1

Google サービス アカウントを使用して Google ドライブにファイルをアップロードしようとしています。

ドライバーサービス

public static Drive getDriveService(String secretKeyFile) throws GeneralSecurityException,
    IOException, URISyntaxException {
  HttpTransport httpTransport = new NetHttpTransport();
  JacksonFactory jsonFactory = new JacksonFactory();

  GoogleCredential credential = new GoogleCredential.Builder()
      .setTransport(httpTransport)
      .setJsonFactory(jsonFactory)
      .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
      .setServiceAccountScopes(DriveScopes.DRIVE)
      .setServiceAccountPrivateKeyFromP12File(
          new java.io.File(secretKeyFile))
      .build();
  Drive service = new Drive.Builder(httpTransport, jsonFactory, null)
      .setHttpRequestInitializer(credential).setApplicationName("appl name").build();
  return service;
}



ファイルを挿入

 private static File insertFile(Drive service, String title, String description,String mimeType, String filename) {
    File body = new File();
    body.setTitle(title);
    body.setDescription(description);
    body.setMimeType(mimeType);

    java.io.File fileContent = new java.io.File(filename);
    FileContent mediaContent = new FileContent(mimeType, fileContent);
    try {
      File file = service.files().insert(body, mediaContent).execute();
      return file;
    } catch (IOException e) {
      System.out.println("An error occured: " + e);
      return null;
    }
  }



主な方法

     Drive service=null;
        try {
            String secretFile= "somedigit-privatekey.p12";
            service = getDriveService(secretFile);
        } catch (URISyntaxException ex) {
            ex.printStackTrace();
        }
    File insertFile = insertFile(service, "test title", "File description", "text/plain", "c:\\test.txt");
List list = service.files().list();
System.out.println("Files Id : "+insertFile.getId());
System.out.println("Count Files : "+list.size());



さて、私の質問は次のとおりです。

  • ファイルがアップロードされたことをどこでどのように確認できますか?
  • ファイル ID を返すのに list.size() がゼロである理由。
  • ダウンロードリンクも返しますが、そのリンクをブラウザに貼り付けると、ファイルはダウンロードされません。
4

1 に答える 1

3

出品リクエストを作成していますが、実行していません。メソッドを使用executeしてリクエストを行います。

service.files().list().execute();

ダウンロード リンクをブラウザに貼り付けると、ブラウザは 401 で応答します。これは、ダウンロード リクエストにも有効な Authorization ヘッダーが含まれている必要があるためです。次のスニペットを使用して、プログラムでファイルをダウンロードします。

HttpResponse resp = service.getRequestFactory().buildGetRequest(new GenericUrl(file.getDownloadUrl())).execute();
InputStream stream = resp.getContent();

streamファイルコンテンツの入力ストリームです。

または、他の場所で行っているリクエストに を追加しAuthorization: Bearer <access token>ます。

于 2013-05-16T15:24:16.597 に答える