SpringBoot下载Excel文件时,报错文件损坏的解决方案

 更新时间:2021年06月23日 14:48:38   作者:小楼夜听雨QAQ  
这篇文章主要介绍了SpringBoot下载Excel文件时,报错文件损坏的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

SpringBoot下载Excel文件文件损坏

我把模板文件放在了resources目录下

maven插件打包项目的时候,默认会压缩resources目录下的文件。

服务器读取的文件流来自于压缩后的文件,而返回给浏览器时,浏览器把他当作正常的文件解析,自然不能得到正确的结果。

解决方案:

配置一下maven插件,打包的时候不要压缩模板文件,排除拓展名为xlsx的文件。

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <nonFilteredFileExtensions>
                        <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>

即使这里配置了utf-8,也会出现文件的中文名乱码的情况。

想彻底解决乱码问题,我们还需要在代码中需要做一些处理。

下面贴一个工具类,看大概思路即可。

package com.zikoo.czjlk.utils; 
import com.zikoo.czjlk.exception.EmServerError;
import com.zikoo.czjlk.exception.EmServerException; 
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder; 
public class FileUtils { 
    public static void download(HttpServletResponse response, String filePath, String fileName){
 
        try {
            response.setHeader("content-type", "application/octet-stream");
            response.setContentType("application/octet-stream");
            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName,"UTF-8"));
 
            InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath);
 
            writeBytes(is, response.getOutputStream());
        }catch (Exception e) {
            throw new EmServerException(EmServerError.FILE_OPERATION_ERROR);
        }
    }
 
    private static void writeBytes(InputStream is, OutputStream os) {
        try {
            byte[] buf = new byte[1024];
            int len = 0;
            while((len = is.read(buf))!=-1)
            {
                os.write(buf,0,len);
            }
        }catch (Exception e) {
            throw new EmServerException(EmServerError.FILE_OPERATION_ERROR);
        }finally {
            if(is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
 
            if(os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

在SpringBoot项目中,下载文件出现异常:

SpringBoot下载文件,出现异常:Could not find acceptable representation

在这里插入图片描述

接口定义为:

public XResponse<Void> exportProject(@PathVariable("projectId") String projectId,
         HttpServletResponse response) throws Exception 

原因:在下载文件时,接口不能有返回值

将接口定义修改为:

public void exportProject(@PathVariable("projectId") String projectId,
         HttpServletResponse response) throws Exception 

此时下载就没有异常信息了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 搭建Springboot框架并添加JPA和Gradle组件的方法

    搭建Springboot框架并添加JPA和Gradle组件的方法

    这篇文章主要介绍了搭建Springboot框架并添加JPA和Gradle组件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • SpringCloud如何解决服务之间的通信问题

    SpringCloud如何解决服务之间的通信问题

    本文主要介绍了SpringCloud如何解决服务之间的通信问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • Java使用jdbc连接MySQL数据库实例分析

    Java使用jdbc连接MySQL数据库实例分析

    这篇文章主要介绍了Java使用jdbc连接MySQL数据库,结合实例形式分析了Java基于jdbc链接mysql的相关配置及工具类的定义相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • Maven Scope 取值范围小结

    Maven Scope 取值范围小结

    在Maven项目的pom.xml文件中,通常会给dependency设置scope属性,本文主要介绍了Maven Scope 取值范围,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • Java使用正则表达式判断独立字符的存在(代码示例)

    Java使用正则表达式判断独立字符的存在(代码示例)

    通过使用正则表达式,我们可以更加灵活地判断字符串中是否包含特定的字符,并且可以控制匹配的条件,如独立的字符,这为我们处理字符串提供了更多的选择和功能,这篇文章主要介绍了Java使用正则表达式判断独立字符的存在,需要的朋友可以参考下
    2023-10-10
  • IDEA的默认快捷键设置与Eclipse的常用快捷键的设置方法

    IDEA的默认快捷键设置与Eclipse的常用快捷键的设置方法

    这篇文章主要介绍了IDEA的默认快捷键设置与Eclipse的常用快捷键的设置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • java不同版本在多线程中使用随机数生成器的实现

    java不同版本在多线程中使用随机数生成器的实现

    本文主要介绍了java不同版本在多线程中使用随机数生成器的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • SpringBoot+SpringBatch+Quartz整合定时批量任务方式

    SpringBoot+SpringBatch+Quartz整合定时批量任务方式

    这篇文章主要介绍了SpringBoot+SpringBatch+Quartz整合定时批量任务方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 如何使用IDEA新建一个普通的Javaweb项目

    如何使用IDEA新建一个普通的Javaweb项目

    今天给大家普及如何使用IDEA新建一个普通的Javaweb项目及配置tomcat的方法,在文末给大家提到如果不想每次都重启tomcat,可以设置快捷方式,对idea新建Javaweb项目感兴趣的朋友一起看看吧
    2021-06-06
  • Java生成二维码可添加logo和文字功能

    Java生成二维码可添加logo和文字功能

    这篇文章主要介绍了Java生成二维码可添加logo和文字功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02

最新评论