首页>代码>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日
最近浏览更多
周 敬博 LV2
6月6日
木子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日

