springmvc ResponseEntity 下载文件损坏问题解决方法

跟上贴https://blog.csdn.net/qq_36646591/article/details/81698614,这两天做一个文件下载功能,基本上使用的就是springmvc的ResponseEntity来做的,问题是下载的文件总是提示【文件损坏】导致打不开,或者是成功下载了打开提示【文件内容损坏】,研究来研究去网上答案很多但是都不解决问题,唯一解决问题的就是这个帖子,地址如下:http://www.iteye.com/topic/1125784,作者解决问题的思路也很棒。

好了,不多说了,直接说说问题解决方法吧,主要就是配置文件里的顺序:


<bean
        class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="messageConverters">
            <list>
            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
                <bean
                    class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>application/json;charset=UTF-8</value>
                            <value>text/json;charset=UTF-8</value>
                            <value>text/html;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>
                <bean
                    class="org.springframework.http.converter.StringHttpMessageConverter">
                    <property name="supportedMediaTypes">
                        <list>
                            <value>text/plain;charset=UTF-8</value>
                        </list>
                    </property>
                </bean>

            </list>
        </property>
    </bean>

主要就是<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>要放在MappingJackson2HttpMessageConverter的前面,修改之后问题解决!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 Spring MVC 下载文件的示例代码: ```java @RequestMapping(value = "/download") public void downloadFile(HttpServletResponse response) throws IOException { // 获取文件路径 String filePath = "path/to/file"; File file = new File(filePath); // 设置响应头 response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + file.getName()); response.setHeader("Content-Length", String.valueOf(file.length())); // 读取文件并写入响应流 try (InputStream inputStream = new BufferedInputStream(new FileInputStream(file))) { byte[] buffer = new byte[1024]; int len; while ((len = inputStream.read(buffer)) > 0) { response.getOutputStream().write(buffer, 0, len); } response.flushBuffer(); } } ``` 在上面的代码中,`@RequestMapping` 注解用于指定该方法对应的 URL 地址。在本例中,我们将其指定为 `/download`。当用户访问 `/download` 时,该方法会被调用。 接下来,我们获取要下载文件路径,并使用 `File` 类创建一个 `File` 对象。 然后,我们设置响应头,包括文件类型、文件名和文件大小。 最后,我们使用 `FileInputStream` 读取文件,并将文件内容写入响应流。需要注意的是,在写入文件内容之后,我们需要调用 `response.flushBuffer()` 方法来刷新响应流。这样做可以确保所有数据都被写入响应流中。 值得一提的是,上述代码中使用了 try-with-resources 语句,这样可以确保 `InputStream` 在使用完毕后被正确关闭。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值