解决Spring文件下载时文件损毁问题

来源:互联网 发布:消失的爱人 知乎 编辑:程序博客网 时间:2024/05/16 15:48

首先,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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd    http://www.springframework.org/schema/mvchttp://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>



阅读全文
0 0