Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java com.amazonaws.services.s3.model.PutObjectRequest的PutObjectRequest.putObject()方法引发com.amazonaws.services.s3.model.AmazonS3Exception_Java_Amazon Web Services_Amazon S3 - Fatal编程技术网

Java com.amazonaws.services.s3.model.PutObjectRequest的PutObjectRequest.putObject()方法引发com.amazonaws.services.s3.model.AmazonS3Exception

Java com.amazonaws.services.s3.model.PutObjectRequest的PutObjectRequest.putObject()方法引发com.amazonaws.services.s3.model.AmazonS3Exception,java,amazon-web-services,amazon-s3,Java,Amazon Web Services,Amazon S3,嘿,我正在尝试将图像上载到s3 bucket。我的代码是: public static void addObjectToBucketFromStream(AmazonS3 conn, String bucketName, String keyName, InputStream inputStream, Map<String, String> metadataMap,String contentType) throws IOException {

嘿,我正在尝试将图像上载到s3 bucket。我的代码是:

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
            }
        }
    }
}
public static void addObjectToBucketFromStream(美国康涅狄格州亚马逊3号),
字符串bucketName、字符串keyName、InputStream InputStream、,
映射metadataMap,字符串contentType)引发IOException{
试一试{
ObjectMetadata=新的ObjectMetadata();
if(metadataMap!=null){
对于(迭代器迭代器=metadataMap.keySet().Iterator();迭代器
.hasNext();){
字符串键=(字符串)迭代器。下一步();
字符串值=metadataMap.get(键);
元数据.addUserMetadata(键、值);
}
}
setContentLength(inputStream.available());
if(contentType!=null&&!“.equals(contentType)){
metadata.setContentType(contentType);
}
PutObjectRequest por=新的PutObjectRequest(bucketName、keyName、,
输入流、元数据);
por.setCannedAcl(CanneDaccessController.PublicRead);
连接putObject(por);
INTA;
}最后{
如果(inputStream!=null){
试一试{
inputStream.close();
}捕获(IOE异常){
//忽略
}
}
}
}
在此代码中,putObject()抛出com.amazonaws.services.s3.model.PutObjectRequest抛出com.amazonaws.services.s3.model.AmazonS3Exception

在日志中显示


com.amazonaws.services.s3.model.amazons3异常:状态代码:403,AWS服务:Amazon s3,AWS请求ID:8C576CDFEC92534C,AWS错误代码:访问被拒绝,AWS错误消息:访问被拒绝,S3扩展请求ID:q7Rs1xrUbnJgptnJKS5T5qhPc6Y3NT66qaGGA5or6as0i0JloLAYODiHcoztD+seWyExpVHM4ls=

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

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


如果成功,您可以启用Java SDK日志以获取更多信息。

我将验证您的bucket和key名称,如果它们正常,则验证用于创建AmazonS3对象的凭据。您没有执行putObject的权限,但问题是为什么。您是否有一个S3只读用户和一个读/写用户?403表示存在凭据问题,并且没有给出代码和IAM策略。