文档库--列表,文件上传

This commit is contained in:
zhn
2022-02-14 16:43:48 +08:00
parent d2d9fe50c1
commit fa1f3f3d5f
12 changed files with 585 additions and 401 deletions
@@ -1,11 +1,14 @@
package com.jero.modules.oss.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jero.common.system.base.entity.JeroEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import com.jero.common.system.base.entity.JeroEntity;
import org.jeecgframework.poi.excel.annotation.Excel;
import java.util.Date;
@Data
@TableName("oss_file")
@@ -15,10 +18,30 @@ public class OSSFile extends JeroEntity {
private static final long serialVersionUID = 1L;
@Excel(name = "文件名称")
@ApiModelProperty(value = "文件名称")
private String fileName;
@Excel(name = "文件地址")
@ApiModelProperty(value = "文件路径")
private String url;
@ApiModelProperty(value = "关联ID")
private String connectId;
@ApiModelProperty(value = "创建人登录名称")
private String createBy;
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@ApiModelProperty(value = "创建日期")
private Date createTime;
@ApiModelProperty(value = "更新人登录名称")
private String updateBy;
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd")
@ApiModelProperty(value = "更新日期")
private Date updateTime;
@ApiModelProperty(value = "所属部门")
private String sysOrgCode;
}
@@ -1,6 +1,7 @@
package com.jero.modules.oss.service;
import java.io.IOException;
import java.util.List;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.oss.entity.OSSFile;
@@ -9,7 +10,21 @@ import org.springframework.web.multipart.MultipartFile;
public interface IOSSFileService extends IService<OSSFile> {
void upload(MultipartFile multipartFile) throws IOException;
/**
* 本地文件上传
*
* @param mf 文件
* @param bizPath 自定义路径
* @return
*/
public OSSFile uploadLocal(MultipartFile mf, String bizPath);
boolean delete(OSSFile ossFile);
/**
* 批量修改
* @param ossFileList
*/
void updateFileInfo(List<OSSFile> ossFileList);
}
@@ -1,19 +1,33 @@
package com.jero.modules.oss.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.jero.common.exception.JeroBootException;
import com.jero.common.system.vo.LoginUser;
import com.jero.common.util.CommonUtils;
import com.jero.common.util.oConvertUtils;
import com.jero.common.util.oss.OssBootUtil;
import com.jero.modules.oss.entity.OSSFile;
import com.jero.modules.oss.mapper.OSSFileMapper;
import com.jero.modules.oss.service.IOSSFileService;
import me.zhyd.oauth.utils.UuidUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List;
@Service("ossFileService")
public class OSSFileServiceImpl extends ServiceImpl<OSSFileMapper, OSSFile> implements IOSSFileService {
@Value(value = "${jero.path.upload}")
private String uploadpath;
@Override
public void upload(MultipartFile multipartFile) throws IOException {
String fileName = multipartFile.getOriginalFilename();
@@ -27,6 +41,83 @@ public class OSSFileServiceImpl extends ServiceImpl<OSSFileMapper, OSSFile> impl
//update-end--Author:scott Date:20201227 forJT-361【文件预览】阿里云原生域名可以文件预览,自己映射域名kkfileview提示文件下载失败-------------------
this.save(ossFile);
}
/**
* 本地文件上传
*
* @param mf 文件
* @param bizPath 自定义路径
* @return
*/
@Override
public OSSFile uploadLocal(MultipartFile mf, String bizPath) {
//处理文件大小,大于100M抛出异常
long fileSize = mf.getSize() / 1024 / 1024;
String originalFilename = mf.getOriginalFilename();
if (fileSize >= 100) {
throw new JeroBootException(originalFilename + "文件大小超出100MB限制, 请压缩或降低文件质量!");
}
OSSFile oSSFile = new OSSFile();
try {
String ctxPath = uploadpath;
String fileName = null;
String fileType = null;
File file = new File(ctxPath + File.separator + bizPath + File.separator);
if (!file.exists()) {
file.mkdirs();// 创建文件根目录
}
String orgName = mf.getOriginalFilename();// 获取文件名
orgName = CommonUtils.getFileName(orgName);
if (orgName.indexOf(".") != -1) {
fileName = orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf("."));
} else {
fileName = orgName + "_" + System.currentTimeMillis();
}
fileType = orgName.substring(orgName.lastIndexOf("."));
//判断文件类型
if (StringUtils.isNotEmpty(fileType)) {
String[] fileTypeArr = {".doc", ".docx", ".xls", ".xlsx", ".pdf", ".png", ".jfif", ".pjpeg", ".jpeg", ".pjp", ".jpg", ".swf", ".bmp",".rar",".zip"};
boolean flag = true;
for (String fileTypeTemp : fileTypeArr) {
if (fileTypeTemp.equalsIgnoreCase(fileType)) {
flag = false;
}
}
if (flag) {
throw new JeroBootException("只能够上传Word、Excel、PDF、静态图片类型的文件。请重新选择文件!");
}
}
String savePath = file.getPath() + File.separator + fileName;
File savefile = new File(savePath);
FileCopyUtils.copy(mf.getBytes(), savefile);
String dbpath = null;
if (oConvertUtils.isNotEmpty(bizPath)) {
dbpath = bizPath + File.separator + fileName;
} else {
dbpath = fileName;
}
if (dbpath.contains("\\")) {
dbpath = dbpath.replace("\\", "/");
}
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
//存入文件表
oSSFile.setFileName(orgName);
oSSFile.setId(UuidUtils.getUUID());
oSSFile.setUrl(file.getPath());
oSSFile.setCreateBy(loginUser.getUsername());
oSSFile.setCreateTime(new Date());
this.save(oSSFile);
return oSSFile;
} catch (IOException e) {
log.error(e.getMessage(), e);
}
return oSSFile;
}
@Override
public boolean delete(OSSFile ossFile) {
@@ -40,4 +131,9 @@ public class OSSFileServiceImpl extends ServiceImpl<OSSFileMapper, OSSFile> impl
return true;
}
@Override
public void updateFileInfo(List<OSSFile> ossFileList) {
this.updateBatchById(ossFileList);
}
}
@@ -72,50 +72,82 @@ public class CommonController {
return Result.error("没有权限,请联系管理员授权");
}
// /**
// * 文件上传统一方法
// * @param request
// * @param response
// * @return
// */
// @PostMapping(value = "/upload")
// public Result<OSSFile> upload(HttpServletRequest request, HttpServletResponse response) {
// Result<OSSFile> result = new Result<>();
// String savePath = "";
// String bizPath = request.getParameter("biz");
// MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// // 获取上传文件对象
// MultipartFile file = multipartRequest.getFile("file");
// // 文件类型是否处于黑名单
// if(CommonUtils.limitFileSuffix(file.getOriginalFilename(),fileSuffixLimits)){
// result.setMessage("该文件类型不允许上传");
// result.setSuccess(false);
// result.setCode(0);
// return result;
// }
// if(oConvertUtils.isEmpty(bizPath)){
// bizPath = "";
// }
// if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)){
// // 本地上传
// savePath = CommonUtils.uploadLocal(file,bizPath,uploadpath);
// }else{
// // minio上传
// savePath = CommonUtils.upload(file, bizPath, uploadType);
// }
// if(oConvertUtils.isNotEmpty(savePath)){
// //上传成功 进行数据库存储
// OSSFile ossFile = new OSSFile();
// // 文件名
// String fileName = file.getOriginalFilename();
// fileName = CommonUtils.getFileName(fileName);
// ossFile.setFileName(fileName);
// ossFile.setUrl(savePath);
// ossFileService.save(ossFile);
// result.setMessage(savePath);
// result.setResult(ossFile);
// result.setSuccess(true);
// }else {
// result.setMessage("上传失败!");
// result.setSuccess(false);
// }
// return result;
// }
/**
* 文件上传统一方法
*
* @param request
* @param response
* @return
*/
@PostMapping(value = "/upload")
public Result<OSSFile> upload(HttpServletRequest request, HttpServletResponse response) {
public Result<?> upload(HttpServletRequest request, HttpServletResponse response) {
Result<OSSFile> result = new Result<>();
String savePath = "";
String bizPath = request.getParameter("biz");
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// 获取上传文件对象
MultipartFile file = multipartRequest.getFile("file");
// 文件类型是否处于黑名单
if(CommonUtils.limitFileSuffix(file.getOriginalFilename(),fileSuffixLimits)){
result.setMessage("该文件类型不允许上传");
result.setSuccess(false);
result.setCode(0);
return result;
}
if(oConvertUtils.isEmpty(bizPath)){
MultipartFile file = multipartRequest.getFile("file");// 获取上传文件对象
if (oConvertUtils.isEmpty(bizPath)) {
if (CommonConstant.UPLOAD_TYPE_OSS.equals(uploadType)) {
//未指定目录,则用阿里云默认目录 upload
bizPath = "upload";
} else {
bizPath = "";
}
}
if(CommonConstant.UPLOAD_TYPE_LOCAL.equals(uploadType)){
// 本地上传
savePath = CommonUtils.uploadLocal(file,bizPath,uploadpath);
}else{
// minio上传
savePath = CommonUtils.upload(file, bizPath, uploadType);
}
if(oConvertUtils.isNotEmpty(savePath)){
//上传成功 进行数据库存储
OSSFile ossFile = new OSSFile();
// 文件名
String fileName = file.getOriginalFilename();
fileName = CommonUtils.getFileName(fileName);
ossFile.setFileName(fileName);
ossFile.setUrl(savePath);
ossFileService.save(ossFile);
result.setMessage(savePath);
result.setResult(ossFile);
OSSFile oSSFile = ossFileService.uploadLocal(file, bizPath);
if (oConvertUtils.isNotEmpty(oSSFile)) {
result.setResult(oSSFile);
result.setSuccess(true);
}else {
} else {
result.setMessage("上传失败!");
result.setSuccess(false);
}