开发者社区> 问答> 正文

SpringMVC 下载文件内容出错 400 请求报错 

我的下载代码:

 @RequestMapping("/doc/downloadDocument") public ResponseEntity<byte[]> download(String fileName) throws IOException{ File file = new File(getDir(),fileName); if (file.exists()){ //如果文件存在 HttpHeaders httpHeaders = new HttpHeaders(); //设置文件下载的描述信息 String downloadFileName = new String(file.getName().getBytes("UTF-8"),"iso-8859-1"); httpHeaders.setContentDispositionFormData("attachment",downloadFileName); //设置响应的内容是流----二进制 httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM); return new ResponseEntity<>( FileUtils.readFileToByteArray(file), httpHeaders, HttpStatus.OK); }else { return null; } }
下载的图片是损坏的,文本文档的话内容混乱,excel文件则提示文件已损坏.是哪里有问题吗? 而且,下载的文件体积会变大 目测是下载时出问题了,但不知道是啥问题,,求解决

展开
收起
kun坤 2020-05-30 14:35:26 866 0
1 条回答
写回答
取消 提交回答
  • 问题解决了.我用了fastjson替换掉了默认的jackson,不知道是不是这原因,别人用默认的没问题.需要在fastjson配置前加上几句话配置spring消息转换器.问题解决.下载文件出错是因为编码格式的问题.

      <mvc:annotation-driven> <!--不使用默认消息转换器 --> <mvc:message-converters register-defaults="false"> <!--spring消息转换器 --> <bean class="org.springframework.http.converter.StringHttpMessageConverter"/> <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/> <bean class="org.springframework.http.converter.BufferedImageHttpMessageConverter"/>

            <!--解决@Responcebody中文乱码问题 -->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"></constructor-arg>
            </bean>
            <!--配合fastjson支持 -->
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="defaultCharset" value="UTF-8"></property>
                <property name="supportedMediaTypes">
                    <list>
                        <!--顺序保持这样,避免IE下载出错 -->
                        <value>text/html;charset=UTF-8</value>
                        <value>application/json</value>
                    </list>
                </property>
                <property name="fastJsonConfig" ref="fastJsonConfig"></property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven></code></pre> 
    

     ######

     FileUtils.readFileToByteArray
     该函数的代码呢?######FileUtils用的是org.apache.commons.io.FileUtils这个方法######

    引用来自“MStarLight”的评论

     FileUtils.readFileToByteArray
     该函数的代码呢?
      public static byte[] readFileToByteArray(File file) throws IOException {
            InputStream in = null;
            try {
                in = openInputStream(file);
                return IOUtils.toByteArray(in, file.length());
            } finally {
                IOUtils.closeQuietly(in);
            }
        }
     ######一个比较简单的检查方式..下载一个比较小的纯文本(最好在一行内能看完,不然调试看着累),然后打断点,逐步调试。方可解决。######好,我试试######哈
    2020-05-30 14:35:33
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载