- 请求:必须是POST请求
- 表单:enctype="multipart/form-data"
<form class="mt-5" method="post" enctype="multipart/form-data" th:action="@{/user/upload}"> <div class="form-group row mt-4"> <label for="head-image" class="col-sm-2 col-form-label text-right">选择头像:</label> <div class="col-sm-10"> <div class="custom-file"> <input type="file" name="headerImage" th:class="|custom-file-input ${error!=null?'is-invalid':''}|" id="head-image" lang="es" required=""> <label class="custom-file-label" for="head-image" data-browse="文件">选择一张图片</label> </div> <div class="invalid-feedback" th:text="${error}"> 显示错误信息 </div> </div> </div> <div class="form-group row mt-4"> <div class="col-sm-2"></div> <div class="col-sm-10 text-center"> <button type="submit" class="btn btn-info text-white form-control">立即上传</button> </div> </div> </form>
- SpringMVC:通过MultipartFile处理上传文件
private static final Logger logger = LoggerFactory.getLogger(UserController.class); @Value("${community.path.upload}") private String updatePath; @Value("${community.path.domain}") private String domain; @Value("${server.servlet.context-path}") private String contextPath; @Autowired private UserService userService; @Autowired private HostHoler hostHoler; @RequestMapping(path = "/upload",method = RequestMethod.POST) public String uploadHeader(MultipartFile headerImage, Model model){ if(headerImage==null){ model.addAttribute("error","您还没有选择图片"); return "/site/setting"; } //原始文件名 String fileName = headerImage.getOriginalFilename(); String suffix = fileName.substring(fileName.lastIndexOf(".")); if(StringUtils.isBlank(suffix)){ model.addAttribute("error","文件格式不正确"); return "/site/setting"; } //生成随机文件名 fileName= CommunityUtil.generateUUID()+suffix; //确定文件的存放路径 File file = new File(updatePath + "/" + fileName); try { //存储文件 headerImage.transferTo(file);//将图片信息直接存入该文件中 } catch (IOException e) { logger.error("上传文件失败"+e.getMessage()); throw new RuntimeException("上传文件失败,服务器发送异常"); } //更新当前用户头像路径(web访问路径) //http://localhost:8080/community/user/header/xxx.png User user = hostHoler.getUser(); String headerUrl=domain+contextPath+"/user/header/"+fileName; userService.updateHeader(user.getId(),headerUrl); return "redirect:/index"; } @RequestMapping(path = "/header/{fileName}",method = RequestMethod.GET) public void getHeader(@PathVariable("fileName") String fileName, HttpServletResponse response){ //服务器存放路径 fileName=updatePath+"/"+fileName; //文件后缀 String suffix=fileName.substring(fileName.lastIndexOf(".")); //响应图片 response.setContentType("image/"+suffix); try ( FileInputStream fis=new FileInputStream(fileName); OutputStream os = response.getOutputStream(); ){ byte[] buffer=new byte[1024]; int b=0; while ((b=fis.read(buffer))!=-1){ os.write(buffer,0,b); } } catch (IOException e) { logger.error("读取头像失败"+e.getMessage()); } }
注意:还需要在application.properties中配置好图片在硬盘的位置
Spring中上传文件处理详细说明
最新推荐文章于 2024-04-17 17:46:23 发布