六、springmvc之文件上传
1、普通文件上传页面要求
<form action="" method="post" enctype="multipart/form-data" >
<input type="file" />
</form>
1).必须使用post提交
2).数据类型:multipart/form-data
3).input表单:type="file"
2、spring文件上传页面要求
1).页面传递的file表单的名称必须和此对象属性名一模一样
2).需要配置文件解析器:CommonsMultipartResolver
maxUploadSize属性:可以设置最大上传的大小
3).控制器方法用MultipartFile对象接受 (包含了字节流,文件名称)
配置文件解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--
maxUploadSize:设置最大上传的大小:1M
-->
<property name="maxUploadSize" value="1048576"></property>
</bean>
控制器方法
/**
* request:
* MultipartFile : springMVC提供的对象 ,包含了文件上传中的所有信息(字节流,文件名称)
* 使用条件:
* 1.页面传递的file表单的名称必须和此对象属性名一模一样
* 2.需要配置文件解析器:CommonsMultipartResolver
* 3.控制器方法用MultipartFile对象接受 (包含了字节流,文件名称)
*
*/
@RequestMapping("/upload")
public String testupload(HttpServletRequest request, HttpServletResponse response,MultipartFile uploadFile) throws IOException {
// 1.获取根目录,并创建子目录
String realPath = request.getSession().getServletContext().getRealPath("/upload");
String dateTime = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
File file = new File(realPath, dateTime);
// 如果没有目录,创建
if (!file.exists()) {
file.mkdirs();
}
//2.获取文件名,并生成存储文件的随机名称
String fileName = uploadFile.getOriginalFilename();
String uuid = UUID.randomUUID().toString();
fileName = uuid + fileName;
//3.将上传流输出到文件
uploadFile.transferTo(new File(file, fileName));
return "forward:/WEB-INF/jsps/success.jsp";
}
3、spring跨服务器文件上传
控制器方法
//远程文件地址
private static String remoteServer = "http://localhost:8081/day02_springmvc5_02image/uploads/";
/**
*使用springMVC进行跨服务器文件上传
*
*上传文件服务器需要设置可写
* <init-param>
* <param-name>readonly</param-name>
* <param-value>false</param-value>
* </init-param>
*/
@RequestMapping("/upload1")
public String testupload1(HttpServletRequest request, HttpServletResponse response,
MultipartFile uploadFile) throws IOException {
//1.获取文件名,并生成存储文件的随机名称
String fileName = uploadFile.getOriginalFilename();
String uuid = UUID.randomUUID().toString();
fileName = uuid + fileName;
remoteServer = remoteServer+fileName;
//2.将门户网站和文件服务设置联系
Client client = Client.create();
//3.通过client对象,设置远程服务器地址创建和当前工程的关联关系
WebResource resource = client.resource(remoteServer);
//4.put:将上传到工程中的文件,写入到远程服务器上
resource.put(uploadFile.getBytes());
return "forward:/WEB-INF/jsps/success.jsp";
}
文件服务器需要设置可写
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<!--tomcat文件服务器需要设置只读为false,即 可写-->
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>