【模板:SpringBoot文件上传】

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;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值