基于springboot,按照文件上传的后缀将其分片上传到对应后缀名的文件中到oss

首先,需要在 application.properties 文件中配置 OSS 的相关信息,包括 endpoint、accessKeyId、accessKeySecret、bucketName 等。

oss.endpoint=your_endpoint
oss.accessKeyId=your_access_key_id
oss.accessKeySecret=your_access_key_secret
oss.bucketName=your_bucket_name

然后创建一个名为 OssService 的服务类,用于封装 OSS 的相关操作。

@Service
public class OssService {

    @Value("${oss.endpoint}")
    private String endpoint;

    @Value("${oss.accessKeyId}")
    private String accessKeyId;

    @Value("${oss.accessKeySecret}")
    private String accessKeySecret;

    @Value("${oss.bucketName}")
    private String bucketName;

    private OSS ossClient;

    /**
     * 初始化 OSS 客户端
     */
    @PostConstruct
    private void initOssClient() {
        ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    }

    /**
     * 分片上传文件到 OSS
     * @param file 上传的文件
     * @param folderPath 文件夹路径
     * @throws Exception
     */
    public void uploadFileByPart(File file, String folderPath) throws Exception {
        String fileName = file.getName();
        String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);
        String newFileName = UUID.randomUUID().toString() + "." + suffix;
        String key = folderPath + newFileName;

        // 初始化分片上传
        InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(bucketName, key);
        InitiateMultipartUploadResult initResult = ossClient.initiateMultipartUpload(initRequest);
        String uploadId = initResult.getUploadId();

        // 计算文件分片数
        long partSize = 1024 * 1024 * 5; // 5MB
        long fileLength = file.length();
        int partCount = (int) (fileLength / partSize);
        if (fileLength % partSize != 0) {
            partCount++;
        }

        // 上传文件分片
        List<PartETag> partETags = new ArrayList<>();
        for (int i = 0; i < partCount; i++) {
            long startPos = i * partSize;
            long curPartSize = (i == partCount - 1) ? (fileLength - startPos) : partSize;
          // 构造分片上传请求
			UploadPartRequest uploadRequest = new UploadPartRequest();
			uploadRequest.setBucketName(bucketName); // 设置bucket名称
			uploadRequest.setKey(key); // 设置上传文件的key
			uploadRequest.setUploadId(uploadId); // 设置上传的Upload ID
			uploadRequest.setInputStream(new FileInputStream(file)); // 设置上传文件的输入流
			uploadRequest.setPartSize(curPartSize); // 设置分片大小
			uploadRequest.setPartNumber(i + 1); // 设置分片编号
			
			// 执行分片上传并获取结果
			UploadPartResult uploadResult = ossClient.uploadPart(uploadRequest);
			
			// 将分片上传结果添加到partETags列表中
			partETags.add(uploadResult.getPartETag());


        // 完成分片上传
        CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest(bucketName, key, uploadId, partETags);
        ossClient.completeMultipartUpload(completeRequest);
    }

    /**
     * 关闭 OSS 客户端
     */
    @PreDestroy
    private void closeOssClient() {
        if (ossClient != null) {
            ossClient.shutdown();
        }
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值