package com.bear.upload.service;
import java.io.File;
import java.io.IOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.bear.upload.util.FileUtil;
import com.bear.upload.util.RETURN;
import com.bear.upload.vo.CheckMd5FileVO;
import com.bear.upload.vo.UploadVO;
@Service
public class ChunkUploadService {
private static Logger LOG = LoggerFactory.getLogger(ChunkUploadService.class);
@Value("${file.upload.path}")
private String UPLOAD_PATH;
private static final String Delimiter = "-";
/**
* 上传之前校验(整个文件、分片)
*
* @param md5FileVO
* @return
*/
public Object check(CheckMd5FileVO md5FileVO) {
Integer type = md5FileVO.getType();
Long chunk = md5FileVO.getChunk();
String fileName = md5FileVO.getFileName();
Long fileSize = md5FileVO.getFileSize();
if (type == 0) {// 未分片校验
String destfilePath = UPLOAD_PATH + File.separator + fileName;
File destFile = new File(destfilePath);
if (destFile.exists() && destFile.length() == fileSize) {
return RETURN.success("文件已存在,跳过", 1);
} else {
return RETURN.success("文件不存在", 0);
}
} else {// 分片校验
String fileMd5 = md5FileVO.getFileMd5();
String destFileDir = UPLOAD_PATH + File.separator + fileMd5;
String destFileName = chunk + Delimiter + fileName;
String destFilePath = destFileDir + File.separator + destFileName;
File destFile = new File(destFilePath);
if (destFile.exists() && destFile.length() == fileSize) {
return RETURN.success("分片已存在,跳过", 1);
} else {
return RETURN.success("分片不存在", 0);
}
}
}
/**
* 文件上传
*
* @param file
* @param uploadVO
* @param appVersion
* @return
*/
public Object upload(MultipartFile file, UploadVO uploadVO) {
Long chunk = uploadVO.getChunk();
if (chunk == null) {// 没有分片
return UnChunkUpload(file, uploadVO);
} else {// 分片
return ChunkUpload(file, uploadVO);
}
}
/**
* 分片上传
*
* @param file
* @param uploadVO
* @param appVersion
* @return
*/
public Object ChunkUpload(MultipartFile file, UploadVO uploadVO) {
String fileName = uploadVO.getName();
String fileMd5 = uploadVO.getFileMd5();
Long chunk = uploadVO.getChunk();// 当前片
Long chunks = uploadVO.getChunks();// 总共多少片
// 分片目录创建
String chunkDirPath = UPLOAD_PATH + File.separator + fileMd5;
File chunkDir = new File(chunkDirPath);
if (!chunkDir.exists()) {
chunkDir.mkdirs();
}
// 分片文件上传
String chunkFileName = chunk + Delimiter + fileName;
String chunkFilePath = chunkDir + File.separator + chunkFileName;
File chunkFile = new File(chunkFilePath);
try {
file.transferTo(chunkFile);
} catch (Exception e) {
LOG.error("分片上传出错", e);
return RETURN.fail("分片上传出错", 1);
}
// 合并分片
Long chunkSize = uploadVO.getChunkSize();
long seek = chunkSize * chunk;
String destFilePath = UPLOAD_PATH + File.separator + fileName;
File destFile = new File(destFilePath);
if (chunkFile.length() > 0) {
try {
FileUtil.randomAccessFile(chunkFile, destFile, seek);
} catch (IOException e) {
LOG.error("分片{}合并失败:{}", chunkFile.getName(), e.getMessage());
return RETURN.fail("分片合并失败", 1);
}
}
if (chunk == chunks - 1) {
// 删除分片文件夹
FileUtil.deleteDirectory(chunkDirPath);
return RETURN.success("上传成功", 1);
} else {
return RETURN.fail("上传中...", 1);
}
}
/**
* 未分片上传
*
* @param file
* @param uploadVO
* @param appVersion
* @return
*/
public Object UnChunkUpload(MultipartFile file, UploadVO uploadVO) {
String fileName = uploadVO.getName();
// String fileMd5 = uploadVO.getFileMd5();
// 文件上传
File destFile = new File(UPLOAD_PATH + File.separator + fileName);
if (file != null && !file.isEmpty()) {
// 上传目录
File fileDir = new File(UPLOAD_PATH);
if (!fileDir.exists()) {
fileDir.mkdirs();
}
if (destFile.exists()) {
destFile.delete();
}
try {
file.transferTo(destFile);
return RETURN.success("上传成功", 0);
} catch (Exception e) {
LOG.error("文件上传出错", e);
return RETURN.fail("文件上传出错", 0);
}
}
return RETURN.fail("上传失败", 0);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
webuploader分片上传
共29个文件
java:8个
png:5个
js:3个
4星 · 超过85%的资源 需积分: 50 122 下载量 69 浏览量
2018-05-03
16:05:24
上传
评论 5
收藏 266KB RAR 举报
温馨提示
1、webuploader是百度研发的上传组件,文档不是特别规整,但是也够用了。 2、前端使用官网的上传图片demo,在此基础上代码略微调整做分片。既可以上传图片也可以上传文件。文件超过分片大小才启用分片。 3、分片上传已做md5校验,达到秒传的效果。分片以后需要合并,可以先分片后合并,也可以边分片边合并,本示例采用的是边分片边合并的方案。 4、后端用springboot做框架搭建。springMVC做rest服务,开启跨域访问。 5、容器用springboot内置的tomcat插件,运行Application的main方法即可启动服务; 显示效果
资源推荐
资源详情
资源评论
收起资源包目录
bear-webuploader.rar (29个子文件)
bear-webuploader
bear-webuploader
src
main
resources
META-INF
spring-devtools.properties 46B
application.properties 128B
java
com
bear
config
SpringMVCConfig.java 2KB
upload
controller
FileController.java 1KB
util
RETURN.java 920B
FileUtil.java 4KB
service
ChunkUploadService.java 5KB
vo
CheckMd5FileVO.java 1KB
UploadVO.java 2KB
Application.java 298B
webapp
.project 661B
index.html 269B
WEB-INF
test
java
pom.xml 2KB
bear-webuploader-web
images
success.png 2KB
expressInstall.swf 756B
progress.psd 25KB
icons.psd 38KB
icons.png 3KB
progress.png 1KB
bg.png 3KB
image.png 2KB
js
upload.js 17KB
jquery.js 90KB
css
style.css 9KB
.project 2KB
index.html 2KB
plugins
webuploader
Uploader.swf 140KB
webuploader.css 747B
webuploader.js 274KB
共 29 条
- 1
资源评论
- 寒清子2020-06-29我下载之后一直报错啊,这个FormParam注解AM182020-07-14这个应该是jar包没有下载完,重新编译下载,也可以加上在当前网络下可用的maven仓库地址再下载编译
- 草稿君2019-04-03学习学习,感谢分享
- lianfengyimeng2018-10-01资源可以用,感谢分享!
- ttvc_all2018-07-26学习学习,感谢分享
AM18
- 粉丝: 3
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功