从.Net到Java学习第十篇——Spring Boot文件上传
2018-07-03 01:01:23来源:博客园 阅读 ()
Spring Boot中的文件上传就是Spring MVC中的文件上传,将其集成进来了。
在模板目录创建一个新的页面 profile/uploadPage.html
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"/> <title>Title</title> </head> <body> <h2 class="indigo-text center">Upload</h2> <form th:action="@{/upload}" method="post" enctype="multipart/form-data" class="col m8 s12 offset-m2"> <div class="input-field col s6"> <input type="file" id="file" name="file"/> </div> <div class="col s6 center"> <button class="btn indigo waves-effect waves-light" type="submit" name="save" >Submit <i class="mdi-content-send right"></i> </button> </div> <div class="col s12 center red-text" th:text="${error}" th:if="${error}"> Error during upload </div> <div class="col m8 s12 offset-m2"> <img th:src="@{${picturePath}}" width="100" height="100"/> </div> </form> </body> </html>
除了表单中的 enctype 属性以外,并没有太多值得关注的。文件将会通过 POST 方法发送到 upload URL 上,新建控制器PictureUploadController
@Controller @SessionAttributes("picturePath") public class PictureUploadController { //跳转到上传文件的页面 @RequestMapping("upload") public String uploadPage() { return "profile/uploadPage"; } //处理文件上传 @RequestMapping(value = "/upload", method = RequestMethod.POST) public String onUpload(MultipartFile file, HttpServletRequest request, RedirectAttributes redirectAttrs, Model model) throws IOException { if (file.isEmpty() || !isImage(file)) { redirectAttrs.addFlashAttribute("error", "Incorrect file.Please upload a picture."); return "redirect:/upload"; } String filePath = request.getSession().getServletContext().getRealPath("pictures/"); Resource picturePath = copyFileToPictures(file,filePath); String _path="/pictures/"+picturePath.getFilename(); model.addAttribute("picturePath",_path); return "profile/uploadPage"; } private Resource copyFileToPictures(MultipartFile file,String filePath) throws IOException { String filename = file.getOriginalFilename(); File tempFile = File.createTempFile("pic", getFileExtension(filename), new FileSystemResource(filePath).getFile()); try (InputStream in = file.getInputStream(); OutputStream out = new FileOutputStream(tempFile)) { IOUtils.copy(in, out); } return new FileSystemResource(tempFile); } //判断上传文件的类型是否是图片 private boolean isImage(MultipartFile file) { return file.getContentType().startsWith("image"); } //获取上传文件的扩展名 private static String getFileExtension(String name) { return name.substring(name.lastIndexOf(".")); } }
在项目的根目录下创建 pictures 目录 ,上述代码做的第一件事情是在 pictures 目录下创建一个临时文件,这个目录位于项目的根文件夹下,所以要确保该目录是存在的。在 Java 中,临时文件只是用来获取文件系统中唯一的文件标识符的,用户可以自行决定是否要删除它 。用户提交的文件将会以 MultipartFile 接口的形式注入到控制器中,这个接口提供了多个方法,用来获取文件的名称、大小及其内容 。try...with 代码块将会自动关闭流,即便出现异常也会如此,从而移除了finally 这样的样板式代码 。我们还可以定义上传文件的功能。
- multipart.maxFileSize:这定义了所允许上传文件的最大容量。尝试上传更大的文件将会出现 MultipartException,其默认值是 1Mb;
- multipart.maxRequestSize:这定义了整个 multipart 请求的最大容量,默认值是 10MB。
运行预览:
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash