1、文件下载和上传
1.文件下载
0.项目见springmvc04
1.访问资源时响应头如果没有设置Content-Disposition,浏览器默认按照inline值进行处理
1.1inline:能显示就显示,不能显示就下载
2.实现下载:只需要修改响应头Content-Disposition =”attachment;filename=“文件名”
2.1 attachment 下载,以附件的形式下载
2.2filename=“值” 就是下载时显示的下载文件名
3.实现步骤:
3.1导入Apache的两个jar
3.2在springmvc.xml文件中对所要下载的静态资源进行放行
3.3在jsp页面中编写下载的连接
<a href="download?fileName=test.rar">下载</a>
3.4编写控制器方法
@RequestMapping("download")
public void download(String fileName,HttpServletRequest req,HttpServletResponse res) throws Exception {
res.setHeader("Content-Disposition", "attachment;filename=test.rar");
ServletOutputStream os=res.getOutputStream();
String path=req.getServletContext().getRealPath("files");
System.out.println(path);
File file=new File(path, fileName);
byte[] bytes = FileUtils.readFileToByteArray(file);
os.write(bytes);
os.flush();
os.close();
}
2文件上传
0. 项目文件springmvc05
-
这个文件上传是基于Apache的,要使用到Apache的一个jar包(主要是Commons-fileupload-1.3.3.jar)
-
MultipartResovler作用:
2.1把客户端上传的文件流,转换成MultipartFile封装类
2.2通过MultipartFile封装类获取到文件流
3.表单数据类型分类
3.1在中其enctype属性控制表单的类型,其
<form action="" enctype="application/x-www-form-urlencoded"></form>
3.2默认值为"application/x-www-form-urlencoded" 普通表单数据(少量文字信息)
3.3text/plain:大量文字时使用的类型,如邮件、论文
3.4multipart/form-data:表单中包含二进制文件内容
4.实现步骤:
4.1导入jar包,包括springmvc的jar包和Apache文件上传的包
4.2编写表单:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="upload" enctype="multipart/form-data" method="post">
姓名<input type="text" name="name"/>
文件<input type="file" name="file"/>
<input type="submit" value="提交"/>
</form>
</body>
</html>
4.3编写配置文件
<!-- 使用注解第一步,扫描注解<context:component-scan base-package="有注解的包"></context:component-scan> -->
<context:component-scan base-package="com.mywolf.controller"></context:component-scan>
<!-- 配置springMVC的注解驱动 -->
<!-- 包含了handlermapping(org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping)
和handleradapter(org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter) -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 下一步写个控制器试一下 -->
<!-- 补充:对于图片,js等静态资源的请求 ,让其向指定的文件夹去寻找,例如在浏览器输入images/my.jpg时,查看其效果-->
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
<mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
<mvc:resources location="/files/" mapping="/files/**"></mvc:resources>
<!-- 文件上传 -->
<!-- 配置multipart解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="500"></property><!-- 设置上传文件的大小不超过多少 -->
</bean>
<!-- 异常解析器 -->
<bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">/erro.jsp</prop><!-- 当文件过大产生异常,产生异常后向error.jsp跳转 -->
</props>
</property>
</bean>
</beans>
注意:划红线的必须为那个名字,不能省略,不能更改
4.4编写控制器
@RequestMapping("upload")
public String upload(MultipartFile file,String name) throws IOException {
System.out.println("name"+name);
String fileName=file.getOriginalFilename();
String suffix=fileName.substring(fileName.lastIndexOf("."));
String uuid = UUID.randomUUID().toString();
FileUtils.copyInputStreamToFile(file.getInputStream(), new File("D:/"+uuid+suffix));
return "/index.jsp";
}