当前位置: 首页 > 知识库问答 >
问题:

使用低级 Java API 的 Amazon S3 分段上传仅上传单个分段

艾修然
2023-03-14

我编写了以下代码来使用多部分上传(每个部分大于5 MB)将集合字符串上传到S3,但当我从S3下载回来时,它只包含来自一个部分的字符串。

import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.*;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class LowLevelMultipartUpload {

    private List<PartETag> partETags = new ArrayList<>();
    private InitiateMultipartUploadResult initResponse;
    AmazonS3 s3Client; String bucketName; String keyName;

    public LowLevelMultipartUpload(AmazonS3 s3Client, String bucketName, String keyName) {
        this.s3Client = s3Client;
        this.bucketName = bucketName;
        this.keyName = keyName;
        InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucketName, keyName);
        initResponse = s3Client.initiateMultipartUpload(initRequest);
    }

    public void uploadPart(int partNumber, InputStream is, ObjectMetadata objectMetadata, boolean isFinalPart) throws IOException {
        // Create the request to upload a part.
        UploadPartRequest uploadRequest = new UploadPartRequest()
                .withBucketName(bucketName)
                .withKey(keyName)
                .withUploadId(initResponse.getUploadId())
                .withPartNumber(partNumber)
                .withInputStream(is)
                .withPartSize(is.available())
                .withObjectMetadata(objectMetadata);

        if(isFinalPart) uploadRequest.withLastPart(true);

        // Upload the part and add the response's ETag to our list.
        UploadPartResult uploadResult = s3Client.uploadPart(uploadRequest);
        partETags.add(uploadResult.getPartETag());
    }

    public void completeUpload() {
        // Complete the multipart upload.
        CompleteMultipartUploadRequest compRequest = new CompleteMultipartUploadRequest(bucketName, keyName,
                initResponse.getUploadId(), partETags);
        s3Client.completeMultipartUpload(compRequest);
    }
}

我按以下顺序调用上述代码。

  1. 创建低级多部分上传对象
  2. 循环上传零件
  3. 呼叫完成上传

共有1个答案

姜弘化
2023-03-14

上面的代码没有问题,工作正常。

 类似资料:
  • 我正在尝试使用 AWS PHP 开发工具包将一个 30 GB 的文件上传到亚马逊 S3。 它适用于最大7GB的文件。上传30 GB文件时,脚本运行约2小时后,我收到以下错误: 将部件上载到多部件上载时发生异常。以下部分出错:-第5部分:在上执行“UploadPart”时出错https://s3.amazonaws.com/Server3-27-SEP-2015/S3_www_1443369605.

  • 我正在尝试使用 java 对亚马逊 S3 进行分段上传。我正在使用下面链接中的代码。 http://docs.aws.amazon.com/AmazonS3/latest/dev/llJavaUploadFile.html 方案 1:要上载的文件大小为 31627。我使用 partSize 作为 500000 来指定单个部件的大小。 由于文件的大小小于部分大小,因此文件将上传到 S3。 方案 2:

  • 我正在尝试使用放心的分段上传方法上传csv文件。在 swagger API 文档中,请求正文如下所示,用于分段 csv 上传。 我的代码是这样的。 这在IntelliJ的想法中工作,没有任何问题。但是,当我使用maven将代码打包到jar中并运行它时,它会返回fileNotes异常。 如我所见,唯一的解决方案是使用java文件input stream,但既然swagger说要使用文件,那就不可能使

  • 问题内容: 由于迁移到Swift 3,我发现很难编译使用Alamofire的项目。 上载multipartFormData时发生问题: 对成员’upload(_:to:method:headers :)的含糊引用 任何帮助,不胜感激,在此先感谢! 解决: 这就是应该在Swift 3中实现上传方法的方式 问题答案: 例如,在 Swift 3中* 使用 Alamofire 4.0.0 : * (确保您

  • 主要内容:Maven依赖关系,HttpClient分段上传请求示例在本教程中,我们将演示如何使用Apache HttpClient 4.5进行分段上传http请求。 Maven依赖关系 我们使用maven来管理依赖关系,并使用Apache HttpClient 4.5版本。 将以下依赖项添加到您的项目中。 pom.xml 文件的内容如下 - HttpClient分段上传请求示例 在这个例子中,我们将演示如何使用HttpClient 4.5来分段上传文件。 我们使

  • 我希望上传一个包含一个文件和一些json的多部分文件,并使用camel rest dsl将该文件输出到本地文件夹。 我在路由中使用处理器,使用HttpServletRequest将多部分请求拆分为多个部分。getPart(),但我收到以下错误: 我已经向 servlet 添加了一个多部分筛选器,并且已经尝试了使用和不使用多部分解决方案 Bean。当我调试处理器时,我可以看到 HttpServlet