首页>代码>vue-simple-uploader + springBoot 文件分片上传列队插件>/tool-upload/src/main/java/com/dai/controller/UploadDemoController.java
package com.dai.controller;

import cn.hutool.crypto.SecureUtil;
import cn.novelweb.tool.http.Result;
import cn.novelweb.tool.upload.file.FileInfo;
import cn.novelweb.tool.upload.local.LocalUpload;
import cn.novelweb.tool.upload.local.pojo.UploadFileParam;
import cn.novelweb.tool.upload.qiniu.QiNiuUpload;
import com.alibaba.fastjson.JSONArray;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;

/**
 * @program: toolupload
 * @description: 本地上传文件、妙传、断点续传样例-demo
 * @author: Dai Yuanchuan
 * @create: 2019-10-30 08:24
 **/
@CrossOrigin
@RestController
@Slf4j
@RequestMapping(value = "/uploader")
public class UploadDemoController {

    static {
        // 修改文件上传的默认路径(如果需要用到的话)
        LocalUpload.defaultPath = System.getProperty("user.dir")
                + File.separatorChar + "log"
                + File.separatorChar + "uploadedFiles";
    }

    @RequestMapping(value = "defaultPathCheckFile", method = RequestMethod.GET)
    public Result defaultPathCheckFile(String md5, String fileName) {
        // 使用默认上传路径 验证 秒传、断点 文件 配置
        log.info("当前默认的上传路径为:{}", LocalUpload.defaultPath);
        try {
            return LocalUpload.checkFileMd5(md5, fileName);
        } catch (Exception e) {
            log.error(e.getMessage());
            return Result.error("上传失败");
        }
    }

    @RequestMapping(value = "checkFile", method = RequestMethod.GET)
    public Result checkFile(String md5, String fileName) {
        // 自定义 分片配置文件 和 上传的缓存文件 路径
        String path = System.getProperty("user.dir") + File.separatorChar + "log" + File.separatorChar;
        String confFilePath = path + "confFile";
        String tmpFilePath = path + "file";
        try {
            return LocalUpload.checkFileMd5(md5, fileName, confFilePath, tmpFilePath);
        } catch (Exception e) {
            log.error(e.getMessage());
            return Result.error("上传失败");
        }
    }

    @RequestMapping(value = "demo1",
            consumes = "multipart/*", headers = "content-type=multipart/form-data",
            produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ResponseBody
    public Result uploadDemo1(UploadFileParam param, HttpServletRequest request) {
        // 使用自定义 分片、缓存 文件路径 分片上传、断点续传 文件
        // 这个 自定义的上传路径 要与 checkFile 方法内的路径一直
        // 不然会影响 断点续传 功能
        String path = System.getProperty("user.dir") + File.separatorChar + "log" + File.separatorChar;
        String confFilePath = path + "confFile";
        String tmpFilePath = path + "file";
        try {
            // 这里的 chunkSize(分片大小) 要与前端传过来的大小一致
            return LocalUpload.fragmentFileUploader(param, confFilePath,
                    tmpFilePath, 5242880L, request);
        } catch (Exception e) {
            log.error(e.getMessage());
            return Result.error("上传失败");
        }
    }


    @RequestMapping(value = "demo2",
            consumes = "multipart/*", headers = "content-type=multipart/form-data",
            produces = "application/json;charset=UTF-8", method = RequestMethod.POST)
    @ResponseBody
    public Result uploadDemo2(UploadFileParam param, HttpServletRequest request) {
        // 使用默认上传路径上传分片文件
        log.info("当前默认的上传路径为:{}", LocalUpload.defaultPath);
        try {
            return LocalUpload.fragmentFileUploader(param, 5242880L, request);
        } catch (Exception e) {
            log.error(e.getMessage());
            return Result.error("上传失败");
        }
    }

    @RequestMapping(value = "demo3", method = RequestMethod.POST)
    @ResponseBody
    public Result uploadDemo3(UploadFileParam param) {
        // 普通的文件上传程序、不使用分片、断点续传(自定义上传路径)
        try {
            return LocalUpload.regularFileUploader(param, LocalUpload.defaultPath);
        } catch (Exception e) {
            log.error(e.getMessage());
            return Result.error("上传失败");
        }
    }

    @RequestMapping(value = "demo4", method = RequestMethod.POST)
    @ResponseBody
    public Result uploadDemo4(UploadFileParam param, HttpServletRequest request) {
        // 普通的文件上传程序、不使用分片、断点续传(使用默认的文件上传路径)
        // 默认路径为  log/uploader  /年/月/日/当前时间毫秒数.mp4
        try {
            log.info("当前默认的上传路径为:{}", LocalUpload.defaultPath);
            return LocalUpload.regularFileUploader(param);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("上传失败");
        }
    }

    // ================================================== vue 分片上传 ==================================================

    @SneakyThrows
    @RequestMapping(value = "slicing-upload", method = RequestMethod.GET)
    public synchronized Result<JSONArray> checkSlicingUploader(UploadParam param) {
        return LocalUpload.checkFileMd5(param.getIdentifier(), param.getFilename());
    }

    @SneakyThrows
    @ApiOperation(value = "文件上传", notes = "参数:文件[<span style=\"color: red;\">大文件请获取上传token直接对接到七牛云服务器</span>]")
    @PostMapping(value = "slicing-upload", consumes = "multipart/*", headers = "content-type=multipart/form-data", produces = "application/json;charset=UTF-8")
    public synchronized Result<FileInfo> slicingUploader(UploadParam param, HttpServletRequest request) {
        String md5 = SecureUtil.md5(param.getFilename());
        File file = new File(LocalUpload.defaultPath + File.separatorChar + md5 + File.separatorChar + param.getFilename());
        if (file.exists()) {
            return Result.ok();
        }
        UploadFileParam uploadFileParam = UploadFileParam.builder()
                .id(param.getIdentifier())
                .chunks(param.getTotalChunks())
                .chunk(param.getChunkNumber() - 1)
                .size(param.getCurrentChunkSize())
                .name(param.getFilename())
                .file(param.getFile())
                .md5(md5)
                .build();
        return LocalUpload.fragmentFileUploader(uploadFileParam, param.getChunkSize(), request);
    }

    // ================================================== 七牛云存储配置 =================================================

    static {
        // ak
        QiNiuUpload.accessKey = "accessKey";
        // sk
        QiNiuUpload.secretKey = "secretKey";
        // 存储桶
        QiNiuUpload.bucket = "bucket";
        // 地区:华东
        QiNiuUpload.region = QiNiuUpload.huaDong;
    }

    @ApiOperation(value = "获取文件上传token", notes = "参数:文件名称")
    @GetMapping(value = "/qi-niu/token", produces = "application/json;charset=UTF-8")
    public Result<String> getUploadToken(HttpServletRequest request, HttpServletResponse response) throws IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("application/json;charset=UTF-8");

        // 获取一个 86400s 时效的七牛云上传token (不传值 默认为 3600s)
        return Result.ok(QiNiuUpload.getUploadToken(86400L));
    }
}
最近下载更多
longtaolee  LV11 4月4日
hello_jugg  LV7 2023年10月31日
13021603815  LV7 2023年4月27日
crosa_Don  LV18 2022年9月16日
sin777  LV2 2022年8月20日
张春青  LV6 2022年4月2日
cqbscxh  LV11 2021年11月12日
股份的规范规定  LV3 2021年11月11日
cc900118  LV17 2021年8月20日
1468229607  LV6 2021年7月11日
最近浏览更多
longtaolee  LV11 4月4日
哪里的完整版  LV7 2月1日
zhangjilu  LV18 2023年11月6日
hello_jugg  LV7 2023年10月31日
760423530  LV2 2023年9月12日
a785213720  LV5 2023年8月29日
justin8023  LV3 2023年7月6日
lipanlong  LV10 2023年7月6日
skiler  LV4 2023年7月2日
2017143155  LV12 2023年6月27日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友