我花了两天时间但仍然无法使用我的java代码来阅读或列出Google云端存储中的对象。我非常渴望得到你的帮助。案例是:我的客户给了我projectID,Bucket Name和gs_oauth2_refresh_token。当我将projectId和gs_oauth2_refresh_token放在.boto文件中时,我可以使用python很好地访问数据。但是现在我正在尝试使用java来访问这些数据。我在互联网上搜索了很多页面但我找不到任何正确的指令。甚至谷歌云主页都含糊不清,请帮我搞清楚。提前谢谢!
以下是我的代码:
public class GCSClient {
private static String APPLICATION_NAME = "MyTestDfaDownloader/1.0";
private static String SERVICE_ACCOUNT_EMAIL = "jack.wang@at.com";
private static String BUCKET_NAME = "****";//the google cloud storage bucket name
private static String OAUTH2_CLIENT_ID = "****";
private static String OAUTH2_CLIENT_SECRET= "***";
private static String OAUTH2_REFRESH_TOKEN="***";//this key we also used in python boto file
private static FileDataStoreFactory dataStoreFactory;
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static HttpTransport httpTransport;
private static Storage storage;
private static final java.io.File DATA_STORE_DIR =
new java.io.File(System.getProperty("user.home"), ".store/storage_sample");
public static void main(String[] args) {
try {
GCSClient test = new GCSClient();
test.init();
test.describe(BUCKET_NAME);//test
} catch (Exception e) {
e.printStackTrace();
}
}
private static void init() {
try {
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);
Credential credential = authorize();
storage = new Storage.Builder(httpTransport, JSON_FACTORY,
new GoogleCredential().setAccessToken(OAUTH2_REFRESH_TOKEN)).setApplicationName(APPLICATION_NAME).build();
} catch (Exception e) {
e.printStackTrace();
}
}
private static Credential authorize() throws Exception {
Set<String> scopes = new HashSet<String>();
scopes.add(StorageScopes.DEVSTORAGE_READ_ONLY);
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(httpTransport, JSON_FACTORY,
OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET, scopes).setDataStoreFactory(dataStoreFactory).setAccessType("offline").build();
// Authorize.
return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
}
public static void describe(String Bucket) {
try {
// Get metadata about the specified bucket.
Storage.Buckets.Get getBucket = storage.buckets().get(BUCKET_NAME);
getBucket.setProjection("full");
Bucket bucket = getBucket.execute();
System.out.println("name: " + BUCKET_NAME);
System.out.println("location: " + bucket.getLocation());
System.out.println("timeCreated: " + bucket.getTimeCreated());
System.out.println("owner: " + bucket.getOwner());
} catch (Exception e) {
e.printStackTrace();
}
}
}
非常感谢! 千斤顶