簡體   English   中英

com.amazonaws.services.s3.model.AmazonS3Exception:必須指定用戶密鑰

[英]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 IDSecret Access Key

您必須將密鑰存儲在安全的位置。 您的密鑰將不再通過AWS管理控制台提供; 你將擁有唯一的副本。 保密,以保護您的帳戶,絕不發送電子郵件。 即使查詢似乎來自AWS或Amazon.com,也不要在您的組織外共享。 合法代表亞馬遜的任何人都不會要求您提供密鑰。

更多信息: http//docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSGettingStartedGuide/AWSCredentials.html

你的client.deleteObjects(....); 方法具有使用數組處理的鍵。 但是下面使用ArrayList來刪除具有proper exception handling對象。

刪除多個對象(啟用版本的存儲桶)

  1. 創建AmazonS3Client類的實例。
  2. 創建DeleteObjectsRequest類的實例,並提供list of objects keys以及可選擇要刪除的對象的版本ID。

    如果指定要刪除的對象的版本ID, Amazon S3 deletes the specific object version 如果未指定要刪除的對象的版本ID,則Amazon S3 adds a delete marker 有關更多信息,請參閱刪除每個請求一個對象

  3. 執行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);
    }
}

有關示例的詳細信息,您可以按照教程進行操作

  1. 使用AWS SDK for Java刪除多個對象
  2. 使用AWS SDK for Java刪除對象
  3. 刪除對象

如果url比key長,你將提交一個數組,該數組的長度大於帶有空條目的鍵的大小,這可能會導致異常(我自己沒試過)。

你可能想要:

client.deleteObjects(new DeleteObjectsRequest(bucketName)
    .withKeys(keys.toArray(new String[keys.length]))
--------------------------------------^^^^

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM