我有一個用戶定義的物件,比如 MyClass,保存在檔案夾內的 Amazon S3 存盤桶中。存盤桶結構如下所示:
<bucket>
-<folder>
--<my unique numbered file containing MyClass>
我需要閱讀此檔案并將其反序列化為 MyClass。
我瀏覽了 AWS 檔案,它建議使用類似以下的內容
Regions clientRegion = Regions.DEFAULT_REGION;
String bucketName = "*** Bucket name ***";
String key = "*** Object key ***";
S3Object fullObject = null, objectPortion = null, headerOverrideObject = null;
try {
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(clientRegion)
.withCredentials(new ProfileCredentialsProvider())
.build();
fullObject = s3Client.getObject(new GetObjectRequest(bucketName, key));
示例:https ://docs.aws.amazon.com/AmazonS3/latest/userguide/download-objects.html
但是,我需要將其反序列化為 MyClass 而不是 S3Object。我無法獲得如何執行此操作的示例。誰能建議這是如何完成的?
uj5u.com熱心網友回復:
您正在查看正確的指南 - 最新 Java API 使用的錯誤主題。您正在查看的主題是舊 V1 代碼。
查看此主題以使用適用于 Java V2 的 AWS 開發工具包- 這被認為是最佳實踐。V2 軟體包以software.amazon.awssdk開頭。
https://docs.aws.amazon.com/AmazonS3/latest/userguide/example_s3_GetObject_section.html
從 S3 存盤桶中獲取物件后,您可以將其轉換為位元組陣列,然后從那里 - 做任何您需要做的事情。這個 V2 示例展示了如何從物件中獲取位元組陣列。
package com.example.s3;
// snippet-start:[s3.java2.getobjectdata.import]
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.core.ResponseBytes;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
import software.amazon.awssdk.services.s3.model.S3Exception;
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
// snippet-end:[s3.java2.getobjectdata.import]
/**
* Before running this Java V2 code example, set up your development environment, including your credentials.
*
* For more information, see the following documentation topic:
*
* https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html
*/
public class GetObjectData {
public static void main(String[] args) {
final String usage = "\n"
"Usage:\n"
" <bucketName> <keyName> <path>\n\n"
"Where:\n"
" bucketName - The Amazon S3 bucket name. \n\n"
" keyName - The key name. \n\n"
" path - The path where the file is written to. \n\n";
if (args.length != 3) {
System.out.println(usage);
System.exit(1);
}
String bucketName = args[0];
String keyName = args[1];
String path = args[2];
ProfileCredentialsProvider credentialsProvider = ProfileCredentialsProvider.create();
Region region = Region.US_EAST_1;
S3Client s3 = S3Client.builder()
.region(region)
.credentialsProvider(credentialsProvider)
.build();
getObjectBytes(s3,bucketName,keyName, path);
s3.close();
}
// snippet-start:[s3.java2.getobjectdata.main]
public static void getObjectBytes (S3Client s3, String bucketName, String keyName, String path ) {
try {
GetObjectRequest objectRequest = GetObjectRequest
.builder()
.key(keyName)
.bucket(bucketName)
.build();
ResponseBytes<GetObjectResponse> objectBytes = s3.getObjectAsBytes(objectRequest);
byte[] data = objectBytes.asByteArray();
// Write the data to a local file.
File myFile = new File(path );
OutputStream os = new FileOutputStream(myFile);
os.write(data);
System.out.println("Successfully obtained bytes from an S3 object");
os.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (S3Exception e) {
System.err.println(e.awsErrorDetails().errorMessage());
System.exit(1);
}
}
// snippet-end:[s3.java2.getobjectdata.main]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/494706.html
上一篇:JavaScript:如何推送到在箭頭函式內創建的物件內的陣列
下一篇:無法列印物件的值
