访问被拒绝 - 亚马逊s3文件上传 - 多部分pdf和音频文件

时间:2016-09-06 13:19:59

标签: amazon-web-services file-upload amazon-s3 amazon

我正在使用Java Play框架将多部分音频和pdf文件上传到Amazon。文件已成功上载到Amazon S3上。但即使我在上传文件时将访问频道列表设置为“公共阅读”,我也无法通过URL访问它们。 这是我用于上传文件的代码

 public void uploadFile2(String bucketName, String folderName,File file)
        throws Exception{


    try {
        validateCrediantals();
    }catch (Exception e){
        throw e;
    }

        List<PartETag> partETags = new ArrayList<PartETag>();

        // Step 1: Initialize.
        InitiateMultipartUploadRequest initRequest = new
                InitiateMultipartUploadRequest(bucketName, folderName).withCannedACL(CannedAccessControlList.PublicRead);
        InitiateMultipartUploadResult initResponse =
                amazonS3.initiateMultipartUpload(initRequest);

        long contentLength = file.length();
        long partSize = 5242880; // Set part size to 5 MB.

        try {
            // Step 2: Upload parts.
            long filePosition = 0;
            for (int i = 1; filePosition < contentLength; i++) {
                // Last part can be less than 5 MB. Adjust part size.
                partSize = Math.min(partSize, (contentLength - filePosition));

                // Create request to upload a part.
                UploadPartRequest uploadRequest = new UploadPartRequest()
                        .withBucketName(bucketName).withKey(folderName)
                        .withUploadId(initResponse.getUploadId()).withPartNumber(i)
                        .withFileOffset(filePosition)
                        .withFile(file)
                        .withPartSize(partSize);

                // Upload part and add response to our list.
                partETags.add(
                        amazonS3.uploadPart(uploadRequest).getPartETag());

                filePosition += partSize;
            }

            // Step 3: Complete.
            CompleteMultipartUploadRequest compRequest = new
                    CompleteMultipartUploadRequest(
                    bucketName,
                    folderName,
                    initResponse.getUploadId(),
                    partETags);

            amazonS3.completeMultipartUpload(compRequest);
        } catch (Exception e) {
            amazonS3.abortMultipartUpload(new AbortMultipartUploadRequest(
                    bucketName, folderName, initResponse.getUploadId()));
        }
    }

这是我尝试点击文件网址时遇到的错误

> <Error>
<Code>AccessDenied</Code>
<Message>Access Denied</Message>
<RequestId>3A791F42F7EE2DBB</RequestId>
<HostId>
jzdu7uNv4RAkqMcaX2BGIK2Zs77j3kO0xPozxS6vcje0MOZIAVm55ZfC9LhgIg1lIuqXWwonpB4=
</HostId>
</Error>

这是我正在使用的政策

public void setBucketPolicy(String bucketName){
        if(isBucketExist(bucketName)){
            Statement allowPublicReadStatement = new Statement(Statement.Effect.Allow)
                    .withPrincipals(Principal.AllUsers)
                    .withActions(S3Actions.GetObject)
                    .withResources(new S3ObjectResource(bucketName, "*"));


            Policy policy = new Policy()
                    .withStatements(allowPublicReadStatement
                             );
            amazonS3.setBucketPolicy(bucketName, policy.toJson());
        }

    }

0 个答案:

没有答案