供以后参考,可以大致修改一下代码来搬砖。。。。。。。
先来说一下场景,这里是在spring环境下,是他里面的一个接口MultipartFile
代码里面用的ResultMoudel这个是我自己封装的一个返回结果包装类,可自行替换掉。
/**
*
* @Title: getImgDirFile
* @Description:图片上传
* @author:
*/
public ResultMoudel upload(MultipartFile imgFile){
if (imgFile.isEmpty()) {
return new ResultMoudel("error","上传失败,请选择文件");
}
//验证文件格式
Boolean checkFileFormat = UploadValidateUtil.checkFileFormat("jpg,jpeg,png,gif",imgFile.getOriginalFilename());
if(!checkFileFormat){
return new ResultMoudel("error","文件格式不正确,只能包含jpg,jpeg,png,gif图片类型");
}
//验证文件大小
Boolean checkFileSize = UploadValidateUtil.checkFileSize(imgFile.getSize(), 10, "M");
if(!checkFileFormat){
return new ResultMoudel("error","文件大小超出范围,只能上传10M以下的图片");
}
//调用下载到指定路径
ResultMoudel upload = uploadImage(imgFile);
return upload;
}
//验证文件格式,在上面调用了
private static final String FILE_TYPE = "doc,dot,docx,dotx,docm,dotm,xls,xlt,xla,xlsx,xltx,xlsm,xltm,xlam,xlsb,xml,ppt,pot,pps,ppa,pptx,potx,ppsx,ppam,pptm,potm,ppsm,bmp,jpg,jpeg,png,gif,txt,zip,rar,7z,pdf";
public static Boolean checkFileFormat(String fileType,String fileName){
if (StringUtils.isBlank(fileType)) {
fileType = FILE_TYPE;
}
// 获取文件后缀名
String extName = fileName.substring(fileName.indexOf(".") + 1).toLowerCase().trim();
// 判断是否为允许上传的文件类型
if (!Arrays.asList(fileType.split(",")).contains(extName)) {
return false;
}
return true;
}
//验证文件大小
public static Boolean checkFileSize(Long len, int size, String unit) {
double fileSize = 0;
if ("B".equals(unit.toUpperCase())) {
fileSize = (double) len;
} else if ("K".equals(unit.toUpperCase())) {
fileSize = (double) len / 1024;
} else if ("M".equals(unit.toUpperCase())) {
fileSize = (double) len / 1048576;
} else if ("G".equals(unit.toUpperCase())) {
fileSize = (double) len / 1073741824;
}
if (fileSize > size) {
return false;
}
return true;
}
//上传图片,在第一个方法里面调用了
public ResultMoudel uploadImage(MultipartFile imgFile){
ResultMoudel msg = new ResultMoudel();
// 拿到文件名
String filename = imgFile.getOriginalFilename();
// 存放上传图片的文件夹
File fileDir = getImgDirFile();
// 输出文件夹绝对路径 -- 这里的绝对路径是相当于当前项目的路径而不是“容器”路径
System.out.println(fileDir.getAbsolutePath());
filename = filename.substring(0,filename.indexOf("."))+new Date().getTime()+filename.substring(filename.indexOf(".")).toLowerCase().trim();
try {
// 构建真实的文件路径
File newFile = new File(fileDir.getAbsolutePath() + File.separator + filename);
System.out.println(newFile.getAbsolutePath());
// 上传图片到 -》 “绝对路径”
imgFile.transferTo(newFile);
msg.setResultFlag("success");
msg.setBody(filename);
} catch (IOException e) {
e.printStackTrace();
}
return msg;
}
//文件夹不在就创建
public final static String IMG_PATH_PREFIX = "yc-water/yc-modules/yc-produce-regulation/static/upload/imgs";
private File getImgDirFile(){
// 构建上传文件的存放 "文件夹" 路径
String fileDirPath = new String(CommonConstants.IMG_PATH_PREFIX);
File fileDir = new File(fileDirPath);
if(!fileDir.exists()){
// 递归生成文件夹
fileDir.mkdirs();
}
return fileDir;
}
再强调一下哈,ResultMoudel只是我自己写的一个结果封装类,大家可以把它换成String 返回图片相对路径给前端页面src。