![](/img/trans.png)
[英]com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied
[英]com.amazonaws.services.s3.model.AmazonS3Exception: User key must be specified
com.amazonaws.services.s3.model.AmazonS3Exception: User key must be specified. (Service: Amazon S3; Status Code: 400;
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1160)
at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:748)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:467)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:302)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3769)
at com.amazonaws.services.s3.AmazonS3Client.deleteObjects(AmazonS3Client.java:1841)
代碼如下所示:
client.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keys.toArray(new String[urls.length]))
訪問/密鑰設置正確。
什么是用戶密鑰 ?
什么是用戶密鑰?
答:
用戶密鑰是用戶可以獲取憑據的密鑰。 It verifies who you are and whether you have permission to access the resources that you are requesting
。 用戶安全憑證具有Access Key ID
和Secret Access Key
。
您必須將密鑰存儲在安全的位置。 您的密鑰將不再通過AWS管理控制台提供; 你將擁有唯一的副本。 保密,以保護您的帳戶,絕不發送電子郵件。 即使查詢似乎來自AWS或Amazon.com,也不要在您的組織外共享。 合法代表亞馬遜的任何人都不會要求您提供密鑰。
更多信息: http : //docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSGettingStartedGuide/AWSCredentials.html
你的client.deleteObjects(....);
方法具有使用數組處理的鍵。 但是下面使用ArrayList
來刪除具有proper exception handling
對象。
刪除多個對象(啟用版本的存儲桶)
AmazonS3Client
類的實例。 創建DeleteObjectsRequest
類的實例,並提供list of objects keys
以及可選擇要刪除的對象的版本ID。
如果指定要刪除的對象的版本ID, Amazon S3 deletes the specific object version
。 如果未指定要刪除的對象的版本ID,則Amazon S3 adds a delete marker
。 有關更多信息,請參閱刪除每個請求一個對象 。
AmazonS3Client.deleteObjects
方法。 以下Java代碼示例演示了上述步驟。
List<KeyVersion> keys = new ArrayList<KeyVersion>();
// Provide a list of object keys and versions.
DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest(bucketName)
.withKeys(keys);
try {
DeleteObjectsResult delObjRes = s3Client.deleteObjects(multiObjectDeleteRequest);
System.out.format("Successfully deleted all the %s items.\n", delObjRes.getDeletedObjects().size());
} catch (MultiObjectDeleteException e) {
// Process exception.
}
對於多對象刪除(非版本化存儲桶),您也可以使用此方法
static void multiObjectNonVersionedDelete(List<KeyVersion> keys) {
// Multi-object delete by specifying only keys (no version ID).
DeleteObjectsRequest multiObjectDeleteRequest = new DeleteObjectsRequest(
bucketName).withQuiet(false);
// Create request that include only object key names.
List<KeyVersion> justKeys = new ArrayList<KeyVersion>();
for (KeyVersion key : keys) {
justKeys.add(new KeyVersion(key.getKey()));
}
multiObjectDeleteRequest.setKeys(justKeys);
// Execute DeleteObjects - Amazon S3 add delete marker for each object
// deletion. The objects no disappear from your bucket (verify).
DeleteObjectsResult delObjRes = null;
try {
delObjRes = s3Client.deleteObjects(multiObjectDeleteRequest);
System.out.format("Successfully deleted all the %s items.\n", delObjRes.getDeletedObjects().size());
} catch (MultiObjectDeleteException mode) {
printDeleteResults(mode);
}
}
有關示例的詳細信息,您可以按照教程進行操作
如果url比key長,你將提交一個數組,該數組的長度大於帶有空條目的鍵的大小,這可能會導致異常(我自己沒試過)。
你可能想要:
client.deleteObjects(new DeleteObjectsRequest(bucketName)
.withKeys(keys.toArray(new String[keys.length]))
--------------------------------------^^^^
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.