Java com.amazonaws.services.s3.model.amazons3异常:必须指定用户密钥
代码如下所示:Java com.amazonaws.services.s3.model.amazons3异常:必须指定用户密钥,java,amazon-s3,Java,Amazon S3,代码如下所示: 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.A
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)
访问/密钥设置正确
用户密钥是什么?如果URL比密钥长,您将提交一个长度超过密钥大小的数组,其中包含空条目,这可能会导致异常(我自己没有尝试过) 您可能需要:
client.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keys.toArray(new String[urls.length]))
什么是用户密钥?
Ans:
用户密钥是用户可以通过其获取凭据的密钥它验证您是谁,以及您是否有权访问您请求的资源
。用户安全凭据具有访问密钥ID
和秘密访问密钥
您必须将密钥存储在安全的位置。你的秘密钥匙不会被破解
可通过AWS管理控制台获得更多信息;你会有
唯一的副本。为保护您的帐户,请对其保密,
永远不要发电子邮件。不要在组织外共享,即使
一项调查似乎来自AWS或Amazon.com。没有人合法地
表示亚马逊将永远向您索要您的密钥
更多信息:
您的client.deleteObjects(…)代码>方法具有使用数组处理的键。但是下面使用ArrayList
删除具有正确异常处理的对象
删除多个对象(已启用版本的存储桶)
创建AmazonS3Client
类的实例
创建DeleteObjectsRequest
类的实例并提供
对象键列表
以及可选的对象版本ID
您要删除的
如果指定要删除的对象的版本ID,Amazon S3将删除特定的对象版本。如果未指定要删除的对象的版本ID,Amazon S3会添加删除标记。有关详细信息,请参阅
执行AmazonS3Client.deleteObjects
方法
下面的Java代码示例演示了前面的步骤
client.deleteObjects(new DeleteObjectsRequest(bucketName)
.withKeys(keys.toArray(new String[keys.length]))
--------------------------------------^^^^
List key=new ArrayList();
//提供对象键和版本的列表。
DeleteObjectsRequest multiObjectDeleteRequest=新的DeleteObjectsRequest(bucketName)
.带钥匙(钥匙);
试一试{
DeleteObjectsResult delObjRes=s3Client.deleteObjects(multiObjectDeleteRequest);
System.out.format(“已成功删除所有%s项。\n”,delObjRes.getDeletedObjects().size());
}捕获(多对象删除异常){
//进程异常。
}
对于多对象删除(非版本化存储桶),可以使用此方法
也
static void multiObjectNonVersionedDelete(列表键){
//通过仅指定键(无版本ID)进行多对象删除。
DeleteObjectsRequest multiObjectDeleteRequest=新的DeleteObjectsRequest(
bucketName)。withQuiet(假);
//创建仅包含对象键名称的请求。
List justKeys=new ArrayList();
用于(密钥版本密钥:密钥){
add(新的KeyVersion(key.getKey());
}
multiObjectDeleteRequest.setKeys(justKeys);
//执行DeleteObjects-Amazon S3为每个对象添加删除标记
//删除。对象不会从您的bucket中消失(验证)。
DeleteObjectsResult delObjRes=null;
试一试{
delObjRes=s3Client.deleteObjects(multiObjectDeleteRequest);
System.out.format(“已成功删除所有%s项。\n”,delObjRes.getDeletedObjects().size());
}捕获(MultiObjectDeleteException模式){
打印删除结果(模式);
}
}
有关示例的详细信息,您可以按照教程进行操作
我应该澄清一下,这一切都是用另一种语言发生的,Go,从那时起就已经澄清了。不确定这是否是AWS问题,但我没有更改任何内容,它又开始工作了。@sberry在我的例子中,应用程序的配置中有一些错误,密钥的属性名包含一些奇怪的字符。因此,如果是配置本身的问题。也许你也面临同样的问题——有人对配置做了一些修改,然后又恢复了更改。如果你放弃了对我答案的投票权,那么我可以知道我被解释了什么问题吗?
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);
}
}