controller
/**
* 文件上传
* @param file 文件实体
* @param fileCategory 内容类别(用于区分、存放)
*/
@ResponseBody
@RequestMapping("/upload")
public Object fileUpload(@RequestParam MultipartFile file, @RequestParam("fileCategory") String fileCategory) throws IOException {
return fileAttributeService.fileUpload(file, fileCategory);
}
entity
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 文件属性表 实体类
*
*/
@TableName("sys_file_attribute")
@Data
public class FileAttribute implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 保存的文件名称
*/
@TableField("file_name")
private String fileName;
/**
* 保存的文件类型
*/
@TableField("file_type")
private String fileType;
/**
* 保存文件类别
*/
@TableField("file_category")
private String fileCategory;
/**
* 创建时间
*/
@TableField(value = "create_time")
private Date createTime;
/**
* 创建人
*/
@TableField(value = "create_user")
private Long createUser;
}
service
import cn.stylefeng.roses.core.util.ToolUtil;
import cn.stylefeng.roses.kernel.model.exception.ServiceException;
import com.alibaba.druid.util.StringUtils;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mifu.core.common.exception.BizExceptionEnum;
import com.mifu.core.common.exception.FilePathEnum;
import com.mifu.core.shiro.ShiroKit;
import com.mifu.core.util.UpLoadUtil;
import com.mifu.modular.system.entity.FileAttribute;
import com.mifu.modular.system.mapper.FileAttributeMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.util.Date;
import java.util.UUID;
/**
* 文件属性表 服务实现类
*
*/
@Service
public class FileAttributeService extends ServiceImpl<FileAttributeMapper, FileAttribute> {
@Value("${pro.uploadPath}")
private String savePath; //图片保存地址
/**
* 文件上传
* @param file 文件实体
* @param fileCategory 文件类别(枚举)
* @return fileAttribute
*/
public FileAttribute fileUpload(MultipartFile file,String fileCategory) throws IOException{
//判断是否为空
if (file.isEmpty()) {
throw new ServiceException(BizExceptionEnum.UPLOAD_ERROR);
}
//获取文件类型
String fileType = file.getContentType().substring(0,file.getContentType().indexOf("/"));
//通过后缀判断
String suffix ="."+ file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
if("image".equals(fileType)){
//大小验证
if (file.getSize() >= 300 * 1024) {
throw new ServiceException(BizExceptionEnum.UPLOAD_SIZE_ERROR);
}
//后缀验证
if(!UpLoadUtil.checkSuffixImg(suffix)){
throw new ServiceException(BizExceptionEnum.UPLOAD_ERROR_IMG);
}
}else{
throw new ServiceException(BizExceptionEnum.FILE_UPLOAD_TYPE_NULL);
}
String filePath = FilePathEnum.filePath(fileCategory);
//内容类别
if(StringUtils.isEmpty(filePath)){
throw new ServiceException(BizExceptionEnum.FILE_UPLOAD_FILECATEGORY_NULL);
}
//保存的文件名
String pictureName = UUID.randomUUID() + suffix;
//保存的路径
String fileSavePath = savePath+"\\"+fileType+"\\"+filePath+"\\";
try {
File newFile = new File(fileSavePath);
if(!newFile.exists()){
newFile.mkdirs();
}
//保存文件
file.transferTo(new File(fileSavePath + pictureName));
} catch (Exception e) {
throw new ServiceException(BizExceptionEnum.UPLOAD_ERROR);
}
FileAttribute fileAttribute = new FileAttribute();
//获取登陆用户信息,添加文件信息
if(ToolUtil.isEmpty(ShiroKit.getUser())){
fileAttribute.setCreateUser(ShiroKit.getAppUser().getId());
}else {
fileAttribute.setCreateUser(ShiroKit.getUser().getId());
}
fileAttribute.setCreateTime(new Date());
fileAttribute.setFileName(pictureName);
fileAttribute.setFileType(fileType);
fileAttribute.setFileCategory(fileCategory);
if(!this.save(fileAttribute)){
throw new ServiceException(BizExceptionEnum.UPLOAD_ERROR);
}
//返回结果
return fileAttribute;
}
/**
* 文件查看
* @param fileId
* @param request
* @param response
*/
@RequestMapping("/find/{fileCategory}/{fileId}")
public void toFindFileId(@PathVariable("fileCategory") String fileCategory,@PathVariable("fileId") Integer fileId, HttpServletResponse response) throws ParseException {
if(StringUtils.isEmpty(fileCategory) || fileId == 0){
throw new ServiceException(BizExceptionEnum.NOT_NULL);
}
FileAttribute fileAttribute = fileAttributeService.getById(fileId);
if(fileAttribute == null){
throw new ServiceException(BizExceptionEnum.FILE_FIND_NULL);
}
if(!fileCategory.equals(fileAttribute.getFileCategory())){
throw new ServiceException(BizExceptionEnum.FILE_FIND_NULL);
}
String FileUrl = savePath+"\\"+fileAttribute.getFileType()+"\\"+FilePathEnum.filePath(fileCategory)+"\\"+fileAttribute.getFileName();
response.setContentType("application/octet-stream;charset=UTF-8");
File file = new File(FileUrl);
if(!file.isFile()){
throw new ServiceException(BizExceptionEnum.FILE_FIND_NULL);
}
try {
//图片读取路径
FileInputStream in=new FileInputStream(file);
int i=in.available();
byte[]data=new byte[i];
in.read(data);
in.close();
//写入输出流0
OutputStream outputStream=new BufferedOutputStream(response.getOutputStream());
outputStream.write(data);
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 文件删除
* @param annexId 文件属性表主键id
*/
public void delFile(String annexId) {
if (ToolUtil.isNotEmpty(annexId)){
FileAttribute fileAttribute = this.getById(annexId);
if(!this.removeById(annexId)){
throw new ServiceException(BizExceptionEnum.FILE_FIND_NULL);
}
if(fileAttribute!=null){
String fileUrl=savePath+"\\"+fileAttribute.getFileType()+"\\"+fileAttribute.getFileCategory()+"\\"+fileAttribute.getFileName();
File file = new File(fileUrl);
if(file.exists()){
file.delete();
}
}
}
}
}
Enum
package com.mifu.core.common.exception;
/**
* @author
* @Description 文件类别 上传至文件夹的枚举
* @date
*/
public enum FilePathEnum {
/**
* 标识信息("内容类别", "文件夹名称");
*/
/*头像*/
HEAD("HEAD","head"),
/*业务员*/
SALESMAN("SALESMAN","salesman");
private String fileCategory;
private String filePath;
FilePathEnum(String fileCategory, String filePath) {
this.fileCategory = fileCategory;
this.filePath = filePath;
}
public static String filePath(String fileCategory) {
for (FilePathEnum m : FilePathEnum.values()) {
if (m.fileCategory.equals(fileCategory)) {
return m.filePath;
}
}
return null;
}
public String getFileCategory() {
return fileCategory;
}
public void setFileCategory(String fileCategory) {
this.fileCategory = fileCategory;
}
public String getFilePath() {
return filePath;
}
public void setFilePath(String filePath) {
this.filePath = filePath;
}
}