文件上传客户端的三要素
1、表单项type="file"
2、表单的提交方式是post
3、表单的enctype属性是多部分表单形式,及enctype="multipart/form-data"
具体操作:
在webapp目录下新建upload.jsp文件,里面写入如下:
<%--文件上传。action是提交地址,method是请求方式,enctype是编码方式(这里使用的是多部分表单形式的编码),br是换行--%><form action="${pageContext.request.contextPath}/user/quick23" method="post" enctype="multipart/form-data"> 名称: <input type="text" name="username"><br> 文件: <input type="file" name="upload"><br> <input type="submit" value="提交"><br></form>
文件上传原理:
1、当form表单修改为多部分表单时,request.getParameter()将失效
2、enctype="application/x-www-form-urlencoded"时,form表单的正文内容格式是:key=value&key=value&key=value
3、当form表单的enctype取值为Mutilpart/form-data时,请求正文内容就变成多部分形式
单文件上传步骤:
第一步: 在pom.xml里面导入fileupload和io坐标
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version></dependency><dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.3</version></dependency>
第二步: 在spring-mvc.xml里面配置文件上传解析器,例如可以指定每个上传文件的大小、上传文件的总大小
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!--指定默认编码是UTF-8--> <property name="defaultEncoding" value="UTF-8"></property> <!--上传文件的总大小,例如102400字节,也就是100MB--> <property name="maxUploadSize" value="102400"></property></bean>
第三步: 在upload.jsp里面写入如下
xxxxxxxxxx<%--单文件上传。action是提交地址,method是请求方式,enctype是编码方式(这里使用的是多部分表单形式的编码),br是换行--%><h2>单文件上传,只能传txt</h2><form action="${pageContext.request.contextPath}/user/quick23" method="post" enctype="multipart/form-data"> 名称: <input type="text" name="username"><br> 文件: <input type="file" name="uploadFile"><br> <input type="submit" value="提交"><br></form><hr>
第四步: 在UserController类编写文件上传代码
(value="/quick23")//注意下面那行的username、uploadFile要跟upload.jsp里面表单的一致public void save23(String username, MultipartFile uploadFile) throws IOException { //获取用户上传的文件名称 String originalFilename = uploadFile.getOriginalFilename(); //把该文件存到我们本地,可以是本地地址,也可以写网络ip地址 uploadFile.transferTo(new File("C:\\springmvc_upload_用户上传库\\单文件\\"+originalFilename));}//访问:http:localhost:8080/upload.jsp,然后测试上传一个txt文件,发现能够获取保存到本地'C:\springmvc_upload_用户上传库\单文件'里面
第一步: 在upload.jsp里面写入如下
xxxxxxxxxx<%--多文件上传--%><h2>多文件上传</h2><form action="${pageContext.request.contextPath}/user/quick24" method="post" enctype="multipart/form-data"> 名称: <input type="text" name="username1"><br> 文件1: <input type="file" name="uploadFile1"><br> 文件2: <input type="file" name="uploadFile2"><br> <input type="submit" value="提交"><br></form>
第二步: 在UserController类编写文件上传代码
(value="/quick24")//注意下面那行的username、uploadFile要跟upload.jsp里面表单的一致public void save24(String username1,MultipartFile uploadFile1,MultipartFile uploadFile2) throws IOException { //获取用户上传的文件名称 String originalFilename1 = uploadFile1.getOriginalFilename(); //把该文件存到我们本地,可以是本地地址,也可以写网络ip地址 uploadFile1.transferTo(new File("C:\\springmvc_upload_用户上传库\\多文件\\"+originalFilename1)); //获取用户上传的文件名称 String originalFilename2 = uploadFile2.getOriginalFilename(); //把该文件存到我们本地,可以是本地地址,也可以写网络ip地址 uploadFile1.transferTo(new File("C:\\springmvc_upload_用户上传库\\多文件\\"+originalFilename2));}//访问:http:localhost:8080/upload.jsp,然后测试上传一个txt文件,发现能够获取保存到本地'C:\springmvc_upload_用户上传库\多文件'里面
第一步: 在upload.jsp里面写入如下
<%--多文件上传--%><h2>多文件上传-使用数组优化写法</h2><form action="${pageContext.request.contextPath}/user/quick25" method="post" enctype="multipart/form-data"> 名称: <input type="text" name="usernames"><br> 文件1: <input type="file" name="uploadFiles"><br> 文件2: <input type="file" name="uploadFiles"><br> <input type="submit" value="提交"><br></form>
第二步: 在UserController类编写文件上传代码
(value="/quick25")//注意下面那行的username、uploadFile要跟upload.jsp里面表单的一致public void save25(String usernames,MultipartFile[] uploadFiles) throws IOException { for (MultipartFile multipartFiles : uploadFiles) { String originalFilename = multipartFiles.getOriginalFilename(); multipartFiles.transferTo(new File("C:\\springmvc_upload_用户上传库\\多文件\\"+originalFilename)); }}//访问:http:localhost:8080/upload.jsp,然后测试上传一个txt文件,发现能够获取保存到本地'C:\springmvc_upload_用户上传库\多文件'里面