2016-02-05 102 views
2

我想用我的存儲credentialFile,請幫助我。桌面APP。我不明白如何使用保存的憑據。我在谷歌支持上找不到一些說明。Java的谷歌雲端硬盤API憑證

private static final String APPLICATION_NAME 
     = "edocsAPI"; 
private static final java.io.File DATA_STORE_DIR = new java.io.File(
     "E:/", ".credentials/drive-java-quickstart"); 
private static FileDataStoreFactory DATA_STORE_FACTORY; 
private static final JsonFactory JSON_FACTORY 
     = JacksonFactory.getDefaultInstance(); 
private static HttpTransport HTTP_TRANSPORT; 
private static final List<String> SCOPES 
     = Arrays.asList(DriveScopes.DRIVE_METADATA_READONLY); 
static { 
    try { 
     HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); 
     DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR); 
    } catch (Throwable t) { 
     t.printStackTrace(); 
    } 
} 

public static Credential authorize() throws IOException { 
    // Load client secrets. 
    InputStream in 
      = new FileInputStream("E:/client_secret_Rep.json"); 
    GoogleClientSecrets clientSecrets 
      = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in)); 

    // Build flow and trigger user authorization request. 
    GoogleAuthorizationCodeFlow flow 
      = new GoogleAuthorizationCodeFlow.Builder(
        HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) 
      .setDataStoreFactory(DATA_STORE_FACTORY) 
      .setAccessType("offline") 
      .build(); 
     Credential credential 
      = new AuthorizationCodeInstalledApp(
        flow, new LocalServerReceiver()).authorize("user"); 

    return credential; 
} 

    public static Drive getDriveService() throws IOException { 
    Credential credential = 
      authorize(); 
       System.out.println("getAccessToken" + credential.getAccessToken()); 

       System.out.println("setAccessToken" + credential.getAccessToken()); 
    System.out.println("setExpiresInSeconds" + credential.getExpiresInSeconds()); 

    System.out.println("setRefreshToken" + credential.getRefreshToken()); 
    return new Drive.Builder(
      HTTP_TRANSPORT, JSON_FACTORY, credential) 
      .setApplicationName(APPLICATION_NAME) 
      .build(); 
} 

public static void main(String[] args) throws IOException { 
    // Build a new authorized API client service. 
    Drive service = getDriveService(); 
    FileList result = service.files().list() 
    .setMaxResults(10) 
    .execute(); 
    List<File> files = result.getItems(); 
    if (files == null || files.size() == 0) { 
    System.out.println("No files found."); 
    } else { 
    System.out.println("Files:"); 
    for (File file : files) { 
    System.out.printf("%s (%s)\n", file.getTitle(), file.getId() , file.getAlternateLink()); 
    file.setShared(Boolean.TRUE); 
    System.out.println(file.getAlternateLink()); 
    } 
    } 

} 

我試着這樣做:

GoogleCredential credential = new GoogleCredential.Builder() 
      .setTransport(new NetHttpTransport()) 
      .setJsonFactory(new JacksonFactory()) 
      .setClientSecrets("Client ID", 
        "ClientSecrets").build(); 

    credential.setAccessToken("AccessToken"); 

但我有一個錯誤401

回答

1

它看起來像發生因過期或無效的訪問令牌中的錯誤。

無效授權頭。您使用的訪問令牌已過期或無效。

以下是documentation對401錯誤的建議。

建議的操作:使用長壽命刷新令牌刷新訪問令牌。如果失敗,請指導用戶通過OAuth流程,如Authorizing Your App with Google Drive中所述。

+0

使用長壽命的刷新令牌刷新訪問令牌。我怎麼能得到他?我不明白 –

相關問題