一、前言
上一篇文章我们了解了,通过Java的io输出流来实现普通的文件下载的功能,是广大程序员在做项目中会普遍使用到的下载文件的方法。但是,在项目中我们都基本上是用框架在开发,所以,我们同时也需要学习每个框架的针对性的文件下载方法,这对于使用框架开发来说,不失为更加有效的一种方法,毕竟使用框架封装好的方法有时会更加节省时间。
那么,本篇博客则会将重点放在springmvc框架的文件下载功能方面,话不多说,切入主题:
二、实例
1.一般需要配置的jar包:
commons.fileupload-1.2.1.jar和commons.io-1.4.0.jar,点击下载jar包
2.xml配置:
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<ref bean="mappingJackson2HttpMessageConverter" />
</list>
</property>
</bean>
<bean id="mappingJackson2HttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
<value>text/html;charset=UTF-8</value>
<value>text/json;charset=UTF-8</value>
</list>
</property>
</bean>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
3.方法实例:
@RequestMapping("/downloadFile")
public ResponseEntity<byte[]> downloadFile(String fileName,HttpServletRequest request) throws IOException{
String realPath = request.getSession().getServletContext().getRealPath("/upload");
System.out.println("文件开始下载!获取到的文件名:"+fileName);
File file = new File(realPath+File.separator+fileName);
InputStream is = new FileInputStream(file);
byte[] buff = null;
buff = new byte[is.available()];
is.read(buff);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attchement;filename=" + file.getName());
HttpStatus statusCode = HttpStatus.OK;
ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(buff, headers, statusCode);
return entity;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
三、总结
1.文件下载的方法思路基本都是:获取前台传递的文件名》获取文件的根路径》拼接完整路径》创建具体 文件》使用输入流读取文件》设置返回值为下载类型》使用输出流将文件输出到客户端,而其中实现这些步骤的方法 程序员可自行去编写和设定,不过基本都是大同小异,而框架也基本是封装了这些方法,让程序员节省更多的步骤和 时间成本,了解其中的原理之后程序员在面对各个框架的时候都基本上能够得心应手;
2.springmvc在处理文件下载方面,使用了ResponseEntity这个返回类型来处理文件写入客户端的功能,在使用之前记得去配置相应的xml,以免出错;
3.实践是检验认识真理性的唯一标准,根据代码和注释多进行尝试,则很快就会明白其中的原理