老K博客 - 一个源码和技术分享的博客

Spring Boot之七牛云分片上传

老K博客
2023-12-10 / 4 评论 / 239 阅读 / 正在检测是否收录...
广告

前言

上传文件在各大网站中都是随处可见的,但是通常文件小到几KB,大到上百MB,如果不对上传接口做处理的话,会发现上传文件过大时就会导致等待时间过长,而且还存在失败的可能,所以我们就需要对接口进行处理。处理的方法通常都是进行分片上传

分片上传本质就是在前端把一个完整的文件拆分成若干份文件上传,上传完成后,服务器再把上传的若干份文件合并成一个完整的文件,再删除若干份分片文件。

本篇文章中我们使用七牛云来进行分片上传。为什么使用七牛云因为本博客就是使用的七牛云,O(∩_∩)O哈哈~

上传代码

    private String fragmentationUpload(MultipartFile file,String suffix){
        //构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Region.region0());
        cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
        cfg.resumableUploadMaxConcurrentTaskCount = 2;  // 设置分片上传并发,1:采用同步上传;大于1:采用并发上传


        String localFilePath = DateUtil.dateTimeToStr(DateUtil.getNowDate(), DateUtil.YYYYMMDD) +"_"+ DateUtil.getNowDate().getTime();
        String key = null;

        Auth auth = Auth.create(qi_niu_accessKey, qi_niu_secretKey);
        String upToken = auth.uploadToken(qi_niu_bucket);

        String localTempDir = Paths.get(System.getenv("java.io.tmpdir"), qi_niu_bucket).toString();
        FileInputStream inputStream = null;
        try {
            //设置断点续传文件进度保存目录
            FileRecorder fileRecorder = new FileRecorder(localTempDir);
            UploadManager uploadManager = new UploadManager(cfg, fileRecorder);
            try {
                inputStream = (FileInputStream) file.getInputStream();
                Response response = uploadManager.put(inputStream, localFilePath + "." + suffix, upToken,null,null);
                //解析上传成功的结果
                DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
                key =  qi_niu_url + putRet.key;
            } catch (QiniuException ex) {
                ex.printStackTrace();
                if (ex.response != null) {
                    System.err.println(ex.response);

                    try {
                        String body = ex.response.toString();
                        System.err.println(body);
                    } catch (Exception ignored) {
                    }
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        return key;
    }
本文共 283 个字数,平均阅读时长 ≈ 1分钟
广告
0

海报

正在生成.....

评论 (4)

语录
取消
  1. 头像
    dgfd
    ·Windows 10 · Google Chrome
    沙发

    可以可以

    回复 删除 垃圾
    1. 头像
      老K博客 作者
      ·Windows 10 · Google Chrome
      @ dgfd

      画图

      回复 删除 垃圾
  2. 头像
    mmtpmlcqix
    ·Windows 10 · Google Chrome
    板凳

    想想你的文章写的特别好www.jiwenlaw.com

    回复 删除 垃圾
  3. 头像
    nnuhovpcgo
    舟山 ·Windows 10 · Google Chrome
    地毯

    兄弟写的非常好 https://www.cscnn.com/

    回复 删除 垃圾
CC BY-NC-ND