【问题标题】:PutObjectRequest.putObject() method of com.amazonaws.services.s3.model.PutObjectRequest throws com.amazonaws.services.s3.model.AmazonS3Exceptioncom.amazonaws.services.s3.model.PutObjectRequest 的 PutObjectRequest.putObject() 方法抛出 com.amazonaws.services.s3.model.AmazonS3Exception
【发布时间】: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


【解决方案1】:

403 错误通常表示您的 AWS 凭证存在问题。您对 AmazonS3 对象使用什么凭据?默认情况下,它们将位于~/.aws/credentials

您可以使用aws 命令行工具验证凭据是否正确。如果您以前没有使用过它,请运行aws configure 并输入您的信用。然后您可以尝试使用aws s3 cp somefile s3://mybucket 上传文件。

如果成功,您可以将 Java SDK 日志记录为documented here 以获取更多信息。

【讨论】:

    猜你喜欢
    • 2020-03-04
    • 2019-11-10
    • 2021-07-02
    • 2016-01-18
    • 2018-08-07
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    相关资源
    最近更新 更多