2
我是S3的新手。我們的一個供應商與我們共享一個存儲桶並與之對象。我們創建了一個AWS賬戶,並將我們的團隊成員添加爲用戶。我們可以通過amazon aws cli訪問數據庫中的數據。我正在尋找Java API以編程方式下載數據。由第三方以編程方式擁有的Amazon S3存儲桶數據下載
我的代碼是:
/*
* Create your credentials file at ~/.aws/credentials (C:\Users\USER_NAME\.aws\credentials for Windows users)
* and save the following lines after replacing the underlined values with your own.
*
* [default]
* aws_access_key_id = YOUR_ACCESS_KEY_ID
* aws_secret_access_key = YOUR_SECRET_ACCESS_KEY
*/
AmazonS3 s3 = new AmazonS3Client();
Region usEast1 = Region.getRegion(Regions.US_EAST_1);
s3.setRegion(usEast1);
System.out.println("Downloading an object");
S3Object object = s3.getObject(new GetObjectRequest("exports.xyz.t-z", "abc/2015/12/07/62542f4f0164689f5d18cf6-2c324750-6c47-11e5-0e29-00deb82fd81f"));
System.out.println("Content-Type: " + object.getObjectMetadata().getContentType());
的錯誤信息是:
Downloading an object
Caught an AmazonServiceException, which means your request made it to Amazon S3, but was rejected with an error response for some reason.
Error Message: The specified key does not exist. (Service: Amazon S3; Status Code: 404; Error Code: NoSuchKey; Request ID: 3DD21D3934A4456D)
HTTP Status Code: 404
AWS Error Code: NoSuchKey
Error Type: Client
Request ID: 3DD21D3934A4456D
現在作爲錯誤信息說:鍵不存在,我不知道的關鍵是什麼。數據由供應商提供給s3。
但是我可以通過使用以下代碼來訪問數據以查看s3目錄中列出的內容。 (您也可以參考我previous post)
System.out.println("Listing objects");
ObjectListing objectListing = s3.listObjects(
new ListObjectsRequest().withBucketName("exports.xyz.t-z")
.withPrefix("abc/2015/12/07/62542f4f0164689f5d18cf6-2c324750-6c47-11e5-0e29-00deb82fd81f")
);
for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
System.out.println(" - " + objectSummary.getKey() + " " +
"(size = " + objectSummary.getSize() + ")");
}
什麼是下載數據的最佳推薦的方式?
再次感謝羅布..其實我正要發佈答案。具體來說,我有代碼和相同的代碼來運行下載,就像您所提到的那樣...我可以創建一個數據流...並處理流。有沒有一種方法可以直接將文件下載到本地目錄?或者如你所說下載整個文件夾? – Dutta
S3不是文件系統,所以文件夾的概念不適用。查看我對[這個問題]的答案(http://stackoverflow.com/questions/34314051/how-to-download-files-from-amazon-s3/34314659#34314659)以獲取更多信息。 –
我不知道使用Java API作爲單個操作「下載整個文件夾」的方法 - 我認爲您必須列出對象並明確下載每個對象。如果您可以使用CLI界面,則只有一個命令可以執行此操作。請參閱http://docs.aws.amazon.com/cli/latest/reference/s3/sync.html – Rob