文件上传工具

该博客介绍了如何在Spring Boot应用中实现文件上传功能,包括上传工具类的编写,图片存储路径的组织,以及文件大小的限制检查。在上传过程中,首先通过`UploadFileUtils`类将文件保存到指定目录,并创建按日期组织的子目录。同时,`checkFileSize`方法用于验证文件是否超过预设大小。此外,提供了上传应用资源封面文件的示例,涉及图片格式校验、文件类型限制及返回响应数据的封装。
摘要由CSDN通过智能技术生成

上传工具类,直接套用 

package com.gisquest.cloud.multiappcenter.base.util;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.multipart.MultipartFile;

public class UploadFileUtils {
	

/**
* @param String rootPath 图片存储的根路径比如(window):e:file\upload  或者  linux 
    (/opt/PlatformResource)
*
* @param String sufDirectory 主要是用来定义一个分类目录
*
**/
	   public static String uploadFile(HttpServletRequest request, MultipartFile uploadFile,String rootPath,  String sufDirectory ) throws IOException {
	        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS");
	        String res = sdf.format(new Date());
	        //原始名称
	        String originalFilename = uploadFile.getOriginalFilename();
	        String newFileName = res + UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));
	        //创建年月日文件夹
	        Calendar date = Calendar.getInstance();
	        File dateDirs = new File(date.get(Calendar.YEAR)
	                + File.separator + (date.get(Calendar.MONTH) + 1) + File.separator + (date.get(Calendar.DATE)));
	        File newFile = new File(rootPath + File.separator+sufDirectory+ File.separator + dateDirs + File.separator + newFileName);
	        //判断目标文件所在的目录是否存在
	        if (!newFile.getParentFile().exists()) {
	            newFile.getParentFile().mkdirs();
	        }
	        uploadFile.transferTo(newFile);
	        //完整的url
	        String fileUrl =sufDirectory+"/"+date.get(Calendar.YEAR) + "/" + (date.get(Calendar.MONTH) + 1) + "/" + (date.get(Calendar.DATE)) + "/" + newFileName;
	        return fileUrl;
	    }
	
		/**
		 * 判断上传文件大小方法
		 * @param len     文件长度
		 * @param size    限制大小
		 * @return
		 */
		public static boolean checkFileSize(Long len, int size) {
		    double fileSize = 0;
		    fileSize = (double) len / 1048576;
		    if (fileSize > size) {
		        return false;
		    }
		    return true;
		}

}

实例:

  
    /**
              * 上传应用资源封面文件
     * @param file
     * @param request
     * @param response
     * @return
     */
    @ApiOperation(value = "应用资源封面上传", notes = "add by wxy 2021-08-26")
    @RequestMapping(value = "/uploadCover", method = RequestMethod.POST,
            produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseBodyResponse<String> uploadTemplateFiles(MultipartFile file,
    		HttpServletRequest request, HttpServletResponse response) {
        try {
        	String originalFilename = file.getOriginalFilename();
            if (StringUtils.isEmpty(originalFilename)) {
                throw new Exception("文件未上传");
            }
            int  index = originalFilename.lastIndexOf(".");
            String fileType="";
            if(index > 0) {
            	fileType = originalFilename.substring(index+1);
            }else {
            	   throw new Exception("上传文件格式不正确");
            }
            //图片格式校验
            String baseSavePath = Global.getConfig("platform.baseSavePath");
            String restrictExt[] = Global.getConfig("fileExtension").split(",");
            
            if(!Arrays.asList(restrictExt).contains(fileType)) {
            	return new ResponseBodyResponse<String>(ResponseStatus.A900,fileType+"扩展名不符合要求");
            }
             String sufDirectory = "resourceCover";
             String fileUrl =  UploadFileUtils.uploadFile(request, file, baseSavePath,sufDirectory);
             return new ResponseBodyResponse<String>(ResponseStatus.OK.getStatus(),"上传成功",fileUrl);
        } catch (Exception e) {
            logger.error("图片[{}]上传失败", file.getName(),e);
            return new ResponseBodyResponse<String>(ResponseStatus.A900,e.getMessage());
        }
		
    }
    
package com.gisquest.cloud.multiappcenter.restful.common;


import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

@ApiModel(value = "请求返回体")
public class ResponseBodyResponse<T extends Object> {
    @ApiModelProperty("状态值:200成功,其它为失败")
    private Integer status;
    @ApiModelProperty("失败原因")
    private String msg;
    //@JsonIgnore
    private String realMsg;
    private String code;
    @ApiModelProperty("返回成功时具体数据,失败为null,若是分页查询还包含size,total,start信息")
    private T data;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public Integer getStatus() {
        return status;
    }

    public String getMsg() {
        return msg;
    }

    public T getData() {
        return data;
    }

    public String getRealMsg() {
        return realMsg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public boolean isSuccess() {
        return 200 == status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public void setRealMsg(String realMsg) {
        this.realMsg = realMsg;
    }

    public void setData(T data) {
        this.data = data;
    }

    /**
     * 序列化使用
     */
    public ResponseBodyResponse() {

    }

    public ResponseBodyResponse(T data) {
        this.data = data;
        this.status = ResponseStatus.OK.getStatus();
        this.msg = "OK";
        this.realMsg = "OK";
    }

    public ResponseBodyResponse(T data, String msg) {
        this.data = data;
        this.status = ResponseStatus.OK.getStatus();
        this.msg = msg;
    }

    public ResponseBodyResponse(Integer statusE, String msg, T data) {
        this.data = data;
        this.status = statusE;
        this.msg = msg;
    }

    public ResponseBodyResponse(ResponseStatus statusE, String msg) {
        this.status = statusE.getStatus();
        this.msg = msg;
        this.realMsg = msg;
    }

    public ResponseBodyResponse(ResponseStatus statusE) {
        this(statusE, statusE.getMsg());
    }

}

 Global.getConfig()方法是读取properties文件中的配置,这个根据自己情况 

 

 postman调用测试

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值