对象存储实现分片上传

思路

前提条件:不管使用哪家云计算厂商的对象存储,您都至少需要已获取对象存储的:(1).accessKey。(2).secretKey。(3).serviceEndpoint。(4).已经创建了桶。
步骤:

  1. 初始化分片上传事件;
  2. 进行文件分片上传;
  3. 完成分片上传;

实现分析:第一步初始化,需要根据前提条件先获取对象存储客户端。使用客户端开启分片上传事件后,会返回一个uploadId,进行分片上传时需要。第二步,分片上传,实际项目中一般是前端分好片,然后直接调用后端的分片接口,在这里我是将本地文件分片上传,不涉及前端。第三步,根据桶名和uploadId,完成上传(会把各分片合成一个对象)。

所需方法准备

1.获取对象存储客户端方法

    /**
     * 创建AmazonS3对象并返回(外部需要AmazonS3对象来操作时)
     *
     * @return AmazonS3对象
     * @author 
     */
public AmazonS3 amazonS3() {
   
        AWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretKey);

        AmazonS3ClientBuilder amazonS3ClientBuilder = AmazonS3ClientBuilder.standard()
                .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endPoint, "beijing"))
                .withCredentials(new AWSStaticCredentialsProvider(awsCredentials));

        return amazonS3ClientBuilder.build();
    }

2.开启分片上传事件方法

    /**
     * 开启分片上传事件
     * @param uploadParam uuid 和 fileName 生成对象key用
     * @return 返回uploadId和对象key(操作对象时唯一标识)
     */
public Map<String,String> startMultiPartUpload(Map<String,String> uploadParam) {
   
        //初始化分片上传事件
        AmazonS3 amazonS3 = getAmazonS3();
        Map<String,String> uploadInfo = new HashMap<>();
        //存储对象的独一无二key:uuid + filename
        String objectKey = uploadParam.get("uuid") + "_" + uploadParam.get("fileName");
        uploadInfo.put("objectKey",objectKey);
        InitiateMultipartUploadRequest initiateMultipartUploadRequest = new InitiateMultipartUploadRequest(BUCKET_NAME, objectKey);
        InitiateMultipartUploadResult initiatedResult = amazonS3.initiateMultipartUpload(initiateMultipartUploadRequest);
        uploadInfo.put("uploadId",initiatedResult.getUploadId());
        return uploadInfo;
    }

3.开启分片上传方法

   /**
     * 分片上传时调用
     * @param chunkParam 分片上传时所需参数
     * @param file 分片的文件
     */
    @Override
    public void multiPartUpload(FileChunk chunkParam, MultipartFile file) {
   
        AmazonS3 amazonS3 = getAmazonS3();
        UploadPartRequest uploadPartRequest = 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值