实现文件上传和回显
1、新建一个SpringBoot项目,选择 Spring Web 和 thymeleaf 依赖 。pow.xml文件下的依赖如下
2、根据下图,创建如下文件
3、直接上代码
配置文件 application.xml
server:
port: 8005
file:
upload:
path: F://upload/
relationImg: /images/
配置类 MyWenMvcConfigurer.java
/**资源映射路径*/@Configurationpublic class MyWebMvcConfigurer implementsWebMvcConfigurer {/**保存的真实地址*/@Value("${file.upload.path}")
String sysPath;/**请求的相对地址*/@Value("${file.upload.relationImg}")
String relationImg;
@Overridepublic voidaddResourceHandlers(ResourceHandlerRegistry registry) {/**将相对地址映射到真实地址*/registry.addResourceHandler(relationImg+"**").addResourceLocations("file:/"+sysPath+relationImg);
}
}
服务层接口 UploadService.java
public interfaceUploadService {/**保存文件并返回文件的相对路径*/
publicString uploadImg(MultipartFile file);
}
服务层实现类 UploadServiceImpl.java
@Servicepublic class UploadServiceImpl implementsUploadService {
@Value("${file.upload.path}")
String sysPath;
@Value("${file.upload.relationImg}")
String relationImg;
@OverridepublicString uploadImg(MultipartFile file) {//uuid生成的唯一前缀 + 上传文件名 构成唯一的新文件名
String fileName= UUID.randomUUID()+"_"+file.getOriginalFilename();//文件保存路径
String path=sysPath+relationImg;//新建文件filepath
File filepath=newFile(path,fileName);//判断路径是否存在,如果不存在就创建一个
if(!filepath.getParentFile().exists()){
filepath.getParentFile().mkdirs();
}try{//将上传的文件file写入文件filepath
file.transferTo(new File(path+File.separator+fileName));
}catch(IOException e){
e.printStackTrace();
}//将请求文件的相对路径返回
return relationImg+fileName;
}
}
控制类 UploadController.java
@Controllerpublic classUploadController {
@Autowired
UploadService uploadService;
@GetMapping("/uploadImg")publicString getuploadImg(){return "/upload/uploadImg";
}
@PostMapping("/uploadImg")public String uploadImg(@RequestParam("file")MultipartFile file, Model model){
String imgUrl=uploadService.uploadImg(file);
model.addAttribute("imgUrl",imgUrl);return "/upload/uploadImg";
}
}
视图层 uploadImg.html
图片上传并回显图片地址:[[${imgUrl}]]效果图:
真实保存路径:F:\upload\images
注意下面两张图的名字,第一张多了的前缀就是 UUID.randomUUID() 生成的,为了保证文件名的唯一性
单文件上传
控制层 FileController.java
@Controllerpublic classFileController {//单文件上传页面跳转
@GetMapping("/singleUpload")publicString singleUpload(){return "singleUpload";
}//单文件上传管理
@PostMapping("/singleUploadFile")public String singleUploadFile(HttpServletRequest httpServletRequest, MultipartFile file, Model model) throwsIOException {//获取文件名以及后缀名
String fileName=file.getOriginalFilename();//重新生成文件名(根据具体情况生成对应文件名)
fileName= UUID.randomUUID()+"_"+fileName;//指定上传文件本地存储目录,不存在需要提前创建
String dirPath="F:/file/";
File filePath=newFile(dirPath);//指定上传文件本地存储目录,不存在需要提前创建
if(!filePath.exists()){
filePath.mkdirs();
}try{//将文件写入磁盘
file.transferTo(newFile(dirPath,fileName));
model.addAttribute("uploadStatus","上传成功");
}catch(Exception e){
e.printStackTrace();
model.addAttribute("uploadStatus","上传失败:"+e.getMessage());
}//将带上传状态信息回调到文件上传页面
return "singleUpload";
}
}
singleUpload.html
单文件上传上传成功!