springMVC注解式下载文件

来源:互联网 发布:材料工程硕士知乎 编辑:程序博客网 时间:2024/05/16 13:04

使用spring下载文件有两种方式,一种是java通用的文件放入返回流,前两天刚写过地址如下
http://blog.csdn.net/fenfei_zqh/article/details/78789261

今天来记录另一种下载方式Spring注解 @ResponseEntity

 @RequestMapping("/download")    @ResponseBody    public ResponseEntity<byte[]> download() throws IOException {        //文件存储路径可替换成文件所在服务器的绝对地址        String path="F:\\apache-tomcat-8.5.23\\apache-tomcat-8.5.23\\temp\\20171219200233847_.xls";        File file=new File(path);        //创建一个HttpHeader        HttpHeaders headers = new HttpHeaders();        String fileName=new String("你好.xls".getBytes("UTF-8"),"iso-8859-1");//为了解决中文名称乱码问题        //设置返回类型无论是txt、excel都可以使用MediaType.APPLICATION_OCTET_STREAM类型        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);        headers.setContentDispositionFormData("attachment",fileName);        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),                headers, HttpStatus.OK);    }

代码操作很简单,可是在下载时遇到了另一个问题,内容乱码

原文件

这里写图片描述

下载后文件

这里写图片描述

看了很多其他人的解决方式主要是在spring-mvc.xml(spring配置文件)添加形如

<bean class="org.springframework.http.converter.StringHttpMessageConverter">                <property name="supportedMediaTypes">                    <list>                        <value>text/html;charset=UTF-8</value>                        <value>text/plain;charset=UTF-8</value>                        <value>application/json;charset=UTF-8</value>                    </list>                </property>            </bean>

可是并解决不了问题

最后的解决方法反而有点搞笑,就是去掉配置文件里所有形如上面那些代码

<!--<mvc:annotation-driven>-->        <!--<mvc:message-converters register-defaults="true">-->            <!--<bean class="org.springframework.http.converter.StringHttpMessageConverter">-->                <!--<property name="supportedMediaTypes">-->                    <!--<list>-->                        <!--<value>text/html;charset=UTF-8</value>-->                        <!--<value>text/plain;charset=UTF-8</value>-->                        <!--<value>application/json;charset=UTF-8</value>-->                    <!--</list>-->                <!--</property>-->            <!--</bean>-->            <!--&lt;!&ndash;<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>&ndash;&gt;-->            <!--&lt;!&ndash; 配置Fastjson支持 &ndash;&gt;-->            <!--<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter" p:charset="UTF-8">-->                <!--<property name="supportedMediaTypes">-->                    <!--<list>-->                        <!--<value>application/json;charset=UTF-8</value>-->                        <!--<value>text/html;charset=UTF-8</value>-->                        <!--<value>text/plain;charset=UTF-8</value>-->                    <!--</list>-->                <!--</property>-->                <!--<property name="features">-->                    <!--<list>-->                        <!--<value>WriteMapNullValue</value>-->                        <!--<value>QuoteFieldNames</value>-->                        <!--<value>WriteDateUseDateFormat</value>-->                        <!--<value>WriteEnumUsingToString</value>-->                    <!--</list>-->                <!--</property>-->            <!--</bean>-->

注释掉原来代码中的这些配置反而文件下载内容正确了。遇到bug大部分我们都会考虑是我们少写了什么,而恰恰有那一个bug是因为多写了导致的

就像对于感情,总以为她不回头是因为给的她还不够,或许有可能是给的她太多了,一个普普通通的程序员,一个有梦想的程序员。
原创粉丝点击