首先,spring文件下载的代码如下:
/**
* 文件下载
* @return
* @throws IOException
*/
@RequestMapping(value="/download")
public ResponseEntity<byte[]> download(String filename)throws Exception {
// 获取下载文件路径
String path = request.getServletContext().getRealPath("/uploads/");
// 获取下载文件
File file = new File(path + File.separator + filename);
// 解决文件下载时中文文件名乱码
String downloadFielName = new String(filename.getBytes("UTF-8"),"iso-8859-1");
// 设置头信息
HttpHeaders headers = new HttpHeaders();
// 设置浏览器以attachment(下载方式)
headers.setContentDispositionFormData("attachment", downloadFielName);
// application/octet-stream : 二进制流数据
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}
解决下载文件损毁问题:
下载下来的文件会出现乱码或者文件内容损坏的情况,解决办法如下:
在springmvc配置文件中,配置ByteArrayHttpMessageConverter类:
<bean id="arrayHttpMessageConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
引入该类时,该类要在StringHttpMessageConverter类和MappingJackson2HttpMessageConverter类之前;
完整配置为:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 开启控制反转注解的支持 -->
<context:component-scan base-package="com.soft863" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 开启mvc注解的支持 -->
<mvc:annotation-driven>
<mvc:message-converters>
<!-- arrayHttpMessageConverter要放在后面两个之前 -->
<ref bean="arrayHttpMessageConverter" />
<ref bean="stringHttpMessageConverter" />
<ref bean="mappingJackson2HttpMessageConverter" />
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 配置Spring视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 文件上传解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<property name="maxUploadSize" value="999999999"></property>
</bean>
<!-- spring文件下载 -->
<bean id="arrayHttpMessageConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
<!-- 解决中文乱码:该类解决当返回的数据是字符串包含中文时出现乱码问题 -->
<bean id="stringHttpMessageConverter"
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=utf-8</value>
</list>
</property>
</bean>
<!-- 解决IE低版本下载返回json数据 -->
<bean id="mappingJackson2HttpMessageConverter"
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=utf-8</value>
<value>application/json;charset=utf-8</value>
</list>
</property>
</bean>
<!-- 解决静态资源拦截问题 -->
<mvc:default-servlet-handler />
</beans>