使用AmazonS3Client java在S3上上载文件

使用AmazonS3Client java在S3上上载文件,java,file-upload,amazon-s3,multipart,Java,File Upload,Amazon S3,Multipart,我正在使用第三方服务器,它会返回以下内容。 1) 网址 2) 前交叉韧带 3) 政策 4) awsAccesskeyID 5) 签名 6) 钥匙 我可以使用以下代码上传文件 final File localFile = new File(localFilePath); final Part[] parts = { new StringPart("acl", acl), new StringPart("policy", policy), new StringPart("AWSAc

我正在使用第三方服务器,它会返回以下内容。 1) 网址 2) 前交叉韧带 3) 政策 4) awsAccesskeyID 5) 签名 6) 钥匙 我可以使用以下代码上传文件

final File localFile = new File(localFilePath);

final Part[] parts = { new StringPart("acl", acl),
    new StringPart("policy", policy),
    new StringPart("AWSAccessKeyId", awsAccessKeyId),
    new StringPart("signature", signature),
    new StringPart("key", key, HTTP.UTF_8), 
    new FilePart("file", localFile) };

    final MultipartRequestEntity mpRequestEntity = new MultipartRequestEntity(parts, filePost.getParams());

    filePost.setRequestEntity(mpRequestEntity);
    final HttpClient client = new HttpClient();
    try
    {

       status = client.executeMethod(filePost);
    }
但是现在我想使用下面的代码使用AmazonS3Client,但是它抛出了一个异常

10-31 16:21:36.070:INFO/com.amazonaws.request(13882):收到错误 响应:状态代码:403,AWS请求ID:51F7CB27E58F88FD,AWS 错误代码:SignatureDesNotMatch,AWS错误消息:请求 我们计算的签名与您提供的签名不匹配。 检查您的密钥和签名方法,S3扩展请求ID: YwNNsWOXg71vXY1VS0apHnHpHp4YVWRJ63xm8C7w36SYg1MNuIykw75YhQco5Lk7

final AmazonS3Client s3Client=新的AmazonS3Client(新的BasicAWSCredentials(awsAccessKeyId,key));
//创建UploadPartResponse对象的列表。你有这个吗
//为每个部分上传。
最终列表partETags=newarraylist();
//步骤1:初始化。
最终InitiateMultipartUploadRequest initRequest=新的InitiateMultipartUploadRequest(targetURL,键);
最终InitiateMultipartUploadResult initResponse=s3Client.initiateMultipartUpload(initRequest);
最终文件=新文件(localFilePath);
final long contentLength=file.length();
长零件尺寸=5242880;//将部件大小设置为5 MB。
尝试
{
//步骤2:上传部件。
长文件位置=0;
for(inti=1;filePosition

我在这里遗漏了什么吗?

我发现服务器一次就发送了签名来上传文件。在多部分上传的情况下,需要多个签名,这将在各个步骤中需要。。 在服务器共享密钥之前,无法以多个部分上载文件:(


完成..我对签名和密钥有误解..您好,使用此代码,我如何暂停上载并稍后继续?
        final AmazonS3Client s3Client = new AmazonS3Client(new BasicAWSCredentials(awsAccessKeyId, key));


        // Create a list of UploadPartResponse objects. You get one of these
        // for each part upload.
        final List<PartETag> partETags = new ArrayList<PartETag>();

        // Step 1: Initialize.
        final InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(targetURL, key);
        final InitiateMultipartUploadResult initResponse = s3Client.initiateMultipartUpload(initRequest);

        final File file = new File(localFilePath);
        final 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.
                final UploadPartRequest uploadRequest = new UploadPartRequest().withBucketName(targetURL).withKey(key)
                        .withUploadId(initResponse.getUploadId()).withPartNumber(i).withFileOffset(filePosition)
                        .withFile(file).withPartSize(partSize);

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

                filePosition += partSize;
            }

            // Step 3: complete.
            final CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(targetURL, key,
                    initResponse.getUploadId(), partETags);

            s3Client.completeMultipartUpload(compRequest);
        }
        catch ( final Exception e )
        {
            s3Client.abortMultipartUpload(new AbortMultipartUploadRequest(targetURL, key, initResponse.getUploadId()));
            return false;
        }
        return true;