注:只做了文件上传操作,其他的操作可以找其他资料
1.在配置文件配置文件上传大小,默认是20MB,看自己业务需要设置
#源文件存放路径
upload.file.path=c://tmp//
#文件上传大小
spring.servlet.multipart.max-request-size=500MB
spring.servlet.multipart.max-file-size=500MB
import com.mc.common.utils.ResultUtils;
import com.mc.common.vo.Result;
import com.mc.jewelrybespoke.app.service.FileUploadService;
import com.mc.jewelrybespoke.app.utils.PicUploadResult;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@Api(tags = {"文件上传"})
@RestController
@RequestMapping("/app/member/imagefile")
public class FileUploadController {
// 允许上传的格式 图片形式
// private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".png"};
// 文件允许格式
private static final String[] ALLOWFILES_TYPE = { ".rar", ".doc", ".docx", ".zip",
".pdf", ".txt", ".swf", ".xlsx", ".gif", ".png", ".jpg", ".jpeg",
".bmp", ".xls", ".mp4", ".flv", ".ppt", ".avi", ".mpg", ".wmv",
".3gp", ".mov", ".asf", ".asx", ".vob", ".wmv9", ".rm", ".rmvb" };
@Resource
private FileUploadService fileUploadService;
@PostMapping("/uploadImg")
public Result uploadImg(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
boolean isFlag = false;
for (String type : ALLOWFILES_TYPE) {
System.out.println(file.getOriginalFilename());
if (StringUtils.endsWithIgnoreCase(file.getOriginalFilename(), type)) {
isFlag = true;
break;
}
}
if (isFlag) {
PicUploadResult picUploadResult = fileUploadService.uplodadImg(file, request);
boolean isLegal = picUploadResult.isLegal();
if (isLegal) {
Map resMap = new HashMap<>();
resMap.put("imgPath", picUploadResult.getImgPath());
return new ResultUtils<>().setData(resMap);
} else {
return new ResultUtils<>().setErrorMsg("图片上传有误");
}
} else {
return new ResultUtils<>().setErrorMsg("上传的图片格式必须为: \".rar\", \".doc\", \".docx\", \".zip\",\n" +
" \".pdf\", \".txt\", \".swf\", \".xlsx\", \".gif\", \".png\", \".jpg\", \".jpeg\",\n" +
" \".bmp\", \".xls\", \".mp4\", \".flv\", \".ppt\", \".avi\", \".mpg\", \".wmv\",\n" +
" \".3gp\", \".mov\", \".asf\", \".asx\", \".vob\", \".wmv9\", \".rm\", \".rmvb\"");
}
}
@PostMapping("/uploadManyImg")
public Result uploadManyImg(@RequestParam("files") MultipartFile[] files, HttpServletRequest request) {
boolean isFlag = false;
for (MultipartFile uploadFile : files) {
for (String type : ALLOWFILES_TYPE) {
if (StringUtils.endsWithIgnoreCase(uploadFile.getOriginalFilename(), type)) {
isFlag = true;
break;
}
}
}
if (isFlag) {
PicUploadResult picUploadResult = fileUploadService.uploadManyImg(files, request);
boolean isLegal = picUploadResult.isLegal();
if (isLegal) {
Map resMap = new HashMap<>();
resMap.put("imgPaths", picUploadResult.getImgPahts());
return new ResultUtils<>().setData(resMap);
} else {
return new ResultUtils<>().setErrorMsg("文件上传有误");
}
} else {
return new ResultUtils<>().setErrorMsg("上传的图片格式必须为:\".rar\", \".doc\", \".docx\", \".zip\",\n" +
" \".pdf\", \".txt\", \".swf\", \".xlsx\", \".gif\", \".png\", \".jpg\", \".jpeg\",\n" +
" \".bmp\", \".xls\", \".mp4\", \".flv\", \".ppt\", \".avi\", \".mpg\", \".wmv\",\n" +
" \".3gp\", \".mov\", \".asf\", \".asx\", \".vob\", \".wmv9\", \".rm\", \".rmvb\"");
}
}
}
public interface FileUploadService {
//单图片上传
PicUploadResult uplodadImg(MultipartFile multipartFile, HttpServletRequest request);
//多图片上传
PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request);
}
import com.mc.jewelrybespoke.app.service.FileUploadService;
import com.mc.jewelrybespoke.app.utils.PicUploadResult;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@Service
public class FileUploadServiceImpl implements FileUploadService {
// 预留项目上传至绝对路径(在yml里配置你的项目绝对路径)
@Value("${upload.file.path:c:/tmp/}")
private String uploadFilePath;
// 项目根路径下的目录 -- SpringBoot static 目录相当于是根路径下(SpringBoot 默认 为:/static/images/upload/)
private final static String UPLOAD_PATH_PREFIX = "/mc/upload/img/";
@Override
public PicUploadResult uplodadImg(MultipartFile multipartFile, HttpServletRequest request) {
PicUploadResult picUploadResult = uploadImgMethod(multipartFile, request);
return picUploadResult;
}
@Override
public PicUploadResult uploadManyImg(MultipartFile[] uploadFile, HttpServletRequest request) {
List<String> imgPaths = new ArrayList<>();
for (MultipartFile multipartFile : uploadFile) {
PicUploadResult picUploadResult = uploadImgMethod(multipartFile, request);
if(picUploadResult.isLegal()){
imgPaths.add(picUploadResult.getImgPath());
}else{
return picUploadResult;
}
}
PicUploadResult picUploadResult = new PicUploadResult();
picUploadResult.setLegal(true);
picUploadResult.setImgPahts(imgPaths);
return picUploadResult;
}
/**
* 上传图片方法类
* @param multipartFile
* @param request
* @return
*/
private PicUploadResult uploadImgMethod(MultipartFile multipartFile, HttpServletRequest request) {
PicUploadResult picUploadResult = new PicUploadResult();
if (multipartFile.isEmpty()) {
//返回选择文件提示
picUploadResult.setLegal(false);
return picUploadResult;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd/");
String format = sdf.format(new Date());
//存放上传文件的文件夹
//File file = new File("E:\\images" + format);
File file = new File(uploadFilePath);
System.out.println("-----------存放上传文件的文件夹【" + file + "】-----------");
System.out.println("-----------输出文件夹绝对路径 -- 这里的绝对路径是相当于当前项目的路径而不是“容器”路径【" + file.getAbsolutePath() + "】-----------");
if (!file.isDirectory()) {
//递归生成文件夹
file.mkdirs();
}
//获取原始的名字 original:最初的,起始的 方法是得到原来的文件名在客户机的文件系统名称
String oldName = multipartFile.getOriginalFilename();
System.out.println("-----------文件原始的名字【" + oldName + "】-----------");
String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."), oldName.length());
System.out.println("-----------文件要保存后的新名字【" + newName + "】-----------");
try {
//构建真实的文件路径
File newFile = new File(file.getAbsolutePath() + File.separator + newName);
//转存文件到指定路径,如果文件名重复的话,将会覆盖掉之前的文件,这里是把文件上传到 “绝对路径”
multipartFile.transferTo(newFile);
//我只需要用相对路径,IP和端口由前端去拼接服务器IP和网关端口来访问图片
String filePath =UPLOAD_PATH_PREFIX + newName;
//拼接绝对路径:IP+端口+项目路径+文件名
// String filePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + UPLOAD_PATH_PREFIX + newName;
System.out.println("-----------【" + filePath + "】-----------");
picUploadResult.setLegal(true);
picUploadResult.setImgPath(filePath);
return picUploadResult;
} catch (Exception e) {
e.printStackTrace();
}
picUploadResult.setLegal(false);
return picUploadResult;
}
}
实体
public class PicUploadResult implements Serializable {
/**
*文件上传状态
*/
private boolean Legal;
/**
* 文上传路径
*/
private String ImgPath;
/**
* 多文件上传路径集合
*/
private List<String> ImgPahts;
public boolean isLegal() {
return Legal;
}
public void setLegal(boolean legal) {
Legal = legal;
}
public String getImgPath() {
return ImgPath;
}
public void setImgPath(String imgPath) {
ImgPath = imgPath;
}
public List<String> getImgPahts() {
return ImgPahts;
}
public void setImgPahts(List<String> imgPahts) {
ImgPahts = imgPahts;
}
}