- 首先是一个Util包,写一个工具函数,为了检查上传的文件是否有效
public static String TOUTIAO_DOMAIN = "http://127.0.0.1:8080/";
public static String IMAGE_DIR = "D:/upload/";
public static String[] IMAGE_FILE_EXT = new String[]{"png", "bmp", "jpg", "jpeg"};
public static boolean isFileAllowed(String fileExt){
for (String ext : IMAGE_FILE_EXT) {
if(ext.equals(fileExt)){
return true;
}
}
return false;
}
- 然后是Service 层
实现文件的上传,我们选择上传到本地,图片也都是一个个的流
public String saveImage(MultipartFile file)throws IOException {
int dotPos = file.getOriginalFilename().lastIndexOf(".");
if(dotPos < 0){
return null;
}
String fileExt = file.getOriginalFilename().substring(dotPos + 1).toLowerCase();
if(!ToutiaoUtil.isFileAllowed(fileExt)){
return null;
}
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;
Files.copy(file.getInputStream(), new File(ToutiaoUtil.IMAGE_DIR + fileName).toPath(), StandardCopyOption.REPLACE_EXISTING);
return ToutiaoUtil.TOUTIAO_DOMAIN + "image?name=" + fileName;
}
- 最后是我们的Controller 层 这个上传文件主要利用到的API就是MultipartFile这个类
如果要实现多文件上传那么就使用MultipartFile数组:
public String uploadImage(@RequestParam("file") MultipartFile[] file)
// 下面的 MultipartFile file 这个参数是最重要的
@RequestMapping(path = {"/uploadImage/"}, method = {RequestMethod.POST})
@ResponseBody
public String uploadImage(@RequestParam("file") MultipartFile file){
try{
String fileUrl = newsService.saveImage(file);
if(fileUrl == null){
return ToutiaoUtil.getJSONString(1, "上传图片失败");
}
return ToutiaoUtil.getJSONString(0, fileUrl);
}catch(Exception e){
logger.error("上传图片失败" + e.getMessage());
return ToutiaoUtil.getJSONString(1, "上传失败");
}
}
这个依赖可以让你在改变代码的时候不用重启整个项目
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>