文件上传客户端的三要素
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_用户上传库\多文件'里面