首页>代码>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));
    }
}
最近下载更多
543666826  LV34 2024年12月28日
longtaolee  LV11 2024年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日
最近浏览更多
木子520  LV12 5月23日
LeoloSean  LV1 1月3日
543666826  LV34 2024年12月28日
微信网友_6955249237250048  LV5 2024年12月28日
3334004690  LV11 2024年5月28日
longtaolee  LV11 2024年4月4日
哪里的完整版  LV8 2024年2月1日
zhangjilu  LV18 2023年11月6日
hello_jugg  LV7 2023年10月31日
760423530  LV2 2023年9月12日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友