上传文件是我们日常使用最为广泛的功能之一,比如应用端上传头像。本章演示如何从客户端上传到弹簧引导开发的Api中。
https://github.com/fishpro/spring-boot-study/tree/master/spring-boot-study-upload
1新建春引导Maven示例工程项目
注意:本示例是用想法开发工具
-
<李>文件比;新比;项目,如下图选择春天Initializr然后点击【下】下一步李>
<李>填写GroupId(包名),工件(项目名)即可。点击下一步李>
<李> groupId=com.fishpro李>
<李> artifactId=上传李>
<李>选择依赖Spring Web启动前面打钩。李>
<李>项目名设置为spring-boot-study-upload。李>
文件上传不需要引入第三方组件。
2依赖引入Pom.xml
为了演示代码,这里引入thymeleaf
& lt; dependencies> & lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-web & lt;/dependency> & lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-thymeleaf & lt;/dependency> & lt; dependency> & lt; groupId> org.springframework.boot & lt; artifactId> spring-boot-starter-test & lt; scope> test & lt;/dependency> & lt;/dependencies>
3编写上传示例
本章代码主要演示单文件上传和多文件上传,前端采用thymeleaf模板,实际上就是一个html文件。文件清单包括
-
<李>还是。李html前端文件>
<李> FileController。李java控制层文件>
<李> FileUtil。李java文件常用类>
3.1控制层代码
主要使用MultipartFile来实现,如下代码/上传和上传分别为单文件上传和多文件上传。其中@ value (" $ {fishpro.uploadPath} ")是配置文件中设置的。
server.port=8086 fishpro.uploadPath=/用户/jiaojunkang/桌面/上传/
@ controller 公开课FileController { @ value (" $ {fishpro.uploadPath} ") 私人字符串uploadPath; @GetMapping(“还是”) 还是公共字符串(){ 返回“还是”; }/* * *单文件 * */@PostMapping("/上传”) @ResponseBody 对象上传(@RequestParam(“文件”)MultipartFile文件,HttpServletRequest请求){ Object> Map<字符串;地图=new HashMap (); map.put("状态",0); 字符串文件名=file.getOriginalFilename (); .toString文件名=UUID.randomUUID () ();//对文件名称重命名 尝试{ uploadPath FileUtil.uploadFile (file.getBytes(),文件名); map.put(“文件名”,文件名); }捕捉(异常e) { map.put(“地位”,1); map.put(“信息”,e.getMessage ()); } 返回地图; }/* * *多文件 * */@PostMapping("/上传”) @ResponseBody 对象上传(@RequestParam(“文件”)MultipartFile[]文件,HttpServletRequest请求){ Object> Map<字符串;地图=new HashMap (); map.put("状态",0); List文件名=new ArrayList<在(); (MultipartFile文件:文件 ) { 字符串ext=file.getOriginalFilename () .split (“\ \”。) [1]; 字符串文件名=file.getOriginalFilename ();//文件名=UUID.randomUUID () .toString () +“。”+ ext;//对文件名称重命名 尝试{ uploadPath FileUtil.uploadFile (file.getBytes(),文件名); filenames.add(文件名); }捕捉(异常e) { map.put(“地位”,1); map.put(“信息”,e.getMessage ()); 返回地图; } } map.put(“文件名”,文件名); 返回地图; } }
3.2前端文件
前端文件这里演示的比较简单,可以有多中形态,这里使用形式来提交。
& lt; !DOCTYPE html> & lt; html lang=癳n”比; & lt; head> & lt;元charset=皍tf - 8”比; & lt; title> Title & lt;/head> & lt; body> & lt;人力资源/比; & lt; div>单位文件& lt;/div> & lt;形式enctype=岸嗖糠?格式”方法=皃ost”action="/上传”比; 文件& lt;输入类型="文件" name="文件"/比; & lt;输入类型="提交" value=" https://www.yisu.com/zixun/上传”/比; & lt;/form> & lt;人力资源/比; & lt; div>多文件& lt;/div> & lt;形式enctype=岸嗖糠?格式”方法=皃ost”行动="/上传"比; & lt; p>文件1 & lt;输入type="文件" name="文件"/祝辞& lt;/p> & lt; p>文件2 & lt;输入type="文件" name="文件"/祝辞& lt;/p> & lt; p>文件3 & lt;输入type="文件" name="文件"/祝辞& lt;/p> & lt; p> & lt;输入类型=疤峤弧眝alue=" https://www.yisu.com/zixun/上传”/祝辞& lt;/p> & lt;/form> & lt;/body> & lt;/html>弹簧引导文件上传简单实例代码