上传工具类,直接套用
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调用测试