<form action="${pageContext.request.contextPath}/fileupload" method="post" enctype="multipart/form-data">名称:<input type="text" name="username"> <br>文件:<input type="file" name="filePic"> <br><input type="submit" value=https://www.isolves.com/it/cxkf/kj/2020-09-14/"单文件上传">
文件上传原理当 form 表单的 enctype 取值为 application/x-www-form-urlencoded 时 , form 表单的正文内容格式是: name=value&name=value 。当 form 表单的 enctype 取值为 mutilpart/form-data 时 , 请求正文内容就变成多部分形式:
当 form 表单修改为多部分表单时 , request.getParameter() 将失效 。
输入表单项名称 username 为 "张人大" , 上传文件 filePic 为 "a.txt" , 其中文件的内容为 "test renda";此时表单的 Request Body 的有效载荷 payload 如下:
-----------------------------17656195882531319514853385408Content-Disposition: form-data; name="username"?张人大-----------------------------17656195882531319514853385408Content-Disposition: form-data; name="filePic"; filename="a.txt"Content-Type: text/plain?test renda-----------------------------17656195882531319514853385408--
单文件上传步骤分析:- 导入 fileupload 和 io 坐标
- 配置文件上传解析器
- 编写文件上传代码
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version>
配置文件上传解析器spring-mvc.xml<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!-- 设定文件上传的最大值为 5 MB = 5*1024*1024 B --><property name="maxUploadSize" value=https://www.isolves.com/it/cxkf/kj/2020-09-14/"5242880"/>
编写文件上传代码<form action="${pageContext.request.contextPath}/fileupload" method="post" enctype="multipart/form-data">名称:<input type="text" name="username"> <br>文件:<input type="file" name="filePic"> <br><input type="submit" value=https://www.isolves.com/it/cxkf/kj/2020-09-14/"单文件上传">@RequestMapping("/fileupload")public String fileUpload(String username, MultipartFile filePic) throws IOException {// 获取表单的提交参数 , 完成文件上传System.out.println(username);// 获取原始的文件上传名String originalFilename = filePic.getOriginalFilename();filePic.transferTo(new File("E:/upload/" + username + "_" + originalFilename));// 转发到成功页面return "success";}
多文件上传<form action="${pageContext.request.contextPath}/filesupload" method="post" enctype="multipart/form-data">名称:<input type="text" name="username"> <br>文件1:<input type="file" name="filePic"> <br>文件2:<input type="file" name="filePic"> <br><input type="submit" value=https://www.isolves.com/it/cxkf/kj/2020-09-14/"多文件上传">@RequestMapping("/filesupload")public String filesUpload(String username, MultipartFile[] filePic) throws IOException {//获取表单的提交参数 , 完成文件上传System.out.println(username);// 获取原始的文件上传名for (MultipartFile multipartFile : filePic) {String originalFilename = multipartFile.getOriginalFilename();multipartFile.transferTo(new File("E:/upload/" + username + "_" + originalFilename));}// 转发到成功页面return "success";}
异常处理异常处理的思路在 Java 中 , 对于异常的处理一般有两种方式:
- 一种是当前方法捕获处理(try-catch) , 这种处理方式会造成业务代码和异常处理代码的耦合 。
- 另一种是自己不处理 , 而是抛给调用者处理(throws) , 调用者再抛给它的调用者 , 也就是一直向上抛 。在这种方法的基础上 , 衍生出了 SpringMVC 的异常处理机制 。
推荐阅读
- ajax请求controller ajax跨域报错处理
- 头条号满月复盘|自媒体新手的进阶之路,有你想要的干货
- Java进阶知识,轻松理解Java泛型
- 工程师进阶:深入TCP协议
- 黑客术语介绍!web渗透小白的进阶之路
- Linux 进阶语句
- Java开源框架之SpringMVC原理及源码解析
- 每个架构师都在研究的康威定律,程序员进阶路上,你思考过吗?
- MySQL进阶篇 | 合理的使用索引结构和查询
- 范振钰|钓鱼大师的饵料值得信服吗?进阶换饵鱼不认,为何蓝鲫有靠谱标签