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]))
访问/密钥设置正确。
是什么user key?
什么是用户密钥?
Ans:
用户密钥是用户获取凭证的密钥。It verifies who you are and whether you have permission to access the resources that you are requesting
。用户安全凭证有Access Key ID
and Secret Access Key
.
您必须将密钥存储在安全的位置。你的秘钥不会
不再可以通过 AWS 管理控制台使用;你将会拥有
唯一的副本。为了保护您的帐户,请保密,
并且永远不要通过电子邮件发送。不要在组织外部共享它,即使
询问似乎来自 AWS 或 Amazon.com。没有人合法地
代表亚马逊将永远向您询问您的密钥。
了解更多:http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSGettingStartedGuide/AWSCredentials.html http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSGettingStartedGuide/AWSCredentials.html
Your client.deleteObjects(....);
方法具有使用数组进行处理的键。但ArrayList
下面用于删除对象proper exception handling
.
删除多个对象(版本启用的存储桶)
- 创建一个实例
AmazonS3Client
class.
-
创建一个实例DeleteObjectsRequest
类并提供list of objects keys
以及对象的版本 ID(可选)
您要删除的内容。
如果指定要删除的对象的版本 ID,Amazon S3 deletes the specific object version
。如果不指定要删除的对象的版本 ID,Amazon S3 adds a delete marker
。有关更多信息,请参阅每个请求删除一个对象 http://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingOneObject.html.
- 执行
AmazonS3Client.deleteObjects
method.
以下 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);
}
}
有关示例的详细信息,您可以按照教程进行操作
- 使用适用于 Java 的 AWS 开发工具包删除多个对象 http://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingMultipleObjectsUsingJava.html
- 使用适用于 Java 的 AWS 开发工具包删除对象 http://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingOneObjectUsingJava.html
- 删除对象 http://docs.aws.amazon.com/AmazonS3/latest/dev/DeletingObjects.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)