【发布时间】:2016-05-04 18:18:57
【问题描述】:
嘿,我正在尝试将图像上传到 s3 存储桶,我的代码是:
public static void addObjectToBucketFromStream(AmazonS3 conn,
String bucketName, String keyName, InputStream inputStream,
Map<String, String> metadataMap,String contentType) throws IOException {
try {
ObjectMetadata metadata = new ObjectMetadata();
if (metadataMap != null) {
for (Iterator iterator = metadataMap.keySet().iterator(); iterator
.hasNext();) {
String key = (String) iterator.next();
String value = metadataMap.get(key);
metadata.addUserMetadata(key, value);
}
}
metadata.setContentLength(inputStream.available());
if (contentType!=null && !"".equals(contentType)){
metadata.setContentType(contentType);
}
PutObjectRequest por = new PutObjectRequest(bucketName, keyName,
inputStream, metadata);
por.setCannedAcl(CannedAccessControlList.PublicRead);
conn.putObject(por);
int a;
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
// ignore
}
}
}
}
在这段代码中,putObject() 抛出 com.amazonaws.services.s3.model.PutObjectRequest 抛出 com.amazonaws.services.s3.model.AmazonS3Exception
在日志中显示
com.amazonaws.services.s3.model.AmazonS3Exception:状态代码:403,AWS 服务:Amazon S3,AWS 请求 ID:8C576CDFEC92534C,AWS 错误代码:AccessDenied,AWS 错误消息:访问被拒绝,S3 扩展请求 ID: q7Rs1xrUbnJgptnJKS5T5qhPc6Y3NT66qaGGA5or6as0i0JloLAYODiHcoztD+seWyExpVHM4ls=
【问题讨论】:
-
我会验证您的存储桶和密钥名称,如果它们没问题,那么您的凭证将用于创建 AmazonS3 对象。您无权执行 putObject,但问题是为什么。您是否有 S3 只读用户和读/写用户?
-
403 表示存在凭据问题,并且未提供该代码和 IAM 策略。
标签: java amazon-web-services amazon-s3