2016-12-23 6 views
0

Googleドライブアカウントにすべてのファイルをリストしたいとします。私はこのコードを使用しようとしました:401権限のない-cannotリストGoogleドライブファイル

@Test 
public void hello() throws Exception 
{ 
    Drive service = getDriveService(); 
    retrieveAllFiles(service); 
} 

private static final String SERVICE_ACCOUNT_EMAIL = "[email protected]"; 
private static final String userEmail = "[email protected]"; 

public Drive getDriveService() throws GeneralSecurityException, 
    IOException 
{ 
    ClassLoader classLoader = this.getClass().getClassLoader(); 
    java.io.File path = new java.io.File(classLoader.getResource("test-test123.p12").getFile()); 

    HttpTransport httpTransport = new NetHttpTransport(); 
    JacksonFactory jsonFactory = new JacksonFactory(); 
    GoogleCredential credential = new GoogleCredential.Builder() 
     .setTransport(httpTransport) 
     .setJsonFactory(jsonFactory) 
     .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
     .setServiceAccountScopes(Arrays.asList(DriveScopes.DRIVE, DriveScopes.DRIVE_FILE, DriveScopes.DRIVE_METADATA)) 
     .setServiceAccountUser(userEmail) 
     .setServiceAccountPrivateKeyFromP12File(path) 
     .build(); 
    Drive service = new Drive.Builder(httpTransport, jsonFactory, null) 
     .setApplicationName("sonora project") 
     .setHttpRequestInitializer(credential).build(); 
    return service; 
} 

private static List<File> retrieveAllFiles(Drive service) throws IOException 
{ 
    List<File> result = new ArrayList<File>(); 
    Drive.Files.List request = service.files().list(); 

    do 
    { 
     try 
     { 
      FileList files = request.execute(); 

      result.addAll(files.getFiles()); 
      request.setPageToken(files.getNextPageToken()); 
     } 
     catch (IOException e) 
     { 
      System.out.println("An error occurred: " + e); 
      request.setPageToken(null); 
     } 
    } 
    while (request.getPageToken() != null 
     && request.getPageToken().length() > 0); 

    return result; 
} 

私はファイルを一覧表示しようとするとエラー401が表示されます。私はこれをどのように修正できるか知っていますか?

認証部分だけを実行すると、コードが機能しています。

答えて

0

このSO questionに記載されているとおり、アクセストークンが期限切れになっているため、リフレッシュトークンを使用して新しいトークンを取得する必要があります。トークンの有効期限は、refreshTokenを呼び出して処理できます。その呼び出しで「資格情報が無効です」というエラーが発生した場合、ユーザーがアクセスを取り消した可能性があります。取り消しアクセスとトークンの有効期限以外のすべての問題については、OAuthダイアログでユーザーをリダイレクトしてアクセス権を再付与するのが最善の方法です。

関連する問題