惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
腾讯CDC
阮一峰的网络日志
阮一峰的网络日志
GbyAI
GbyAI
B
Blog RSS Feed
Engineering at Meta
Engineering at Meta
Google DeepMind News
Google DeepMind News
MyScale Blog
MyScale Blog
Last Week in AI
Last Week in AI
F
Fortinet All Blogs
云风的 BLOG
云风的 BLOG
N
Netflix TechBlog - Medium
G
Google Developers Blog
博客园_首页
有赞技术团队
有赞技术团队
V
V2EX
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
aimingoo的专栏
aimingoo的专栏
月光博客
月光博客
Hugging Face - Blog
Hugging Face - Blog
The GitHub Blog
The GitHub Blog
S
SegmentFault 最新的问题

故事的程序猿

这个周末堪比加班: 带娃团建和露营⛺️ — 故事的程序猿 文章插图 Skill — 故事的程序猿 26 年 8 月总结 - 入园准备工作~ — 故事的程序猿 笑笑,正式入园 ✅ — 故事的程序猿 脚本解决雷池 WAF 的域名证书自动续签 — 故事的程序猿 嘿, 第一次瑞幸'幸运取餐码'「555」~ — 故事的程序猿 周末吃个大席,再磨点面~ — 故事的程序猿 啊!你黄了啊! — 故事的程序猿 大学基友我轩哥终于结婚啦🎉 — 故事的程序猿 南森 - 小鹿营地「周末露营」 — 故事的程序猿 26 年 7 月总结 - 好热丫,但丰富~ — 故事的程序猿 笑笑三岁生日的一天 — 故事的程序猿 骑行的尽头是折叠车,应验啦~ — 故事的程序猿 Vercel更新Waline(1.41.3)失败问题 — 故事的程序猿 博客升级,脱骨换皮~ — 故事的程序猿 26年6月总结-摆烂 先有潭柘寺,后有北京城~ 26年5月总结-咖啡拉花 装修灯具要注意⚠️ 26年4月总结-提前的假期 SpringBoot多PgSQL数据源的一种方式 带着女儿去广州长隆🚕✈️🦒🐼🐒🐨 长春小游 新功能添加:首页友链、画廊...【建站笔记】 26年3月总结-感冒了哦🤧 使用Protobuf备份数据 新手咖啡入坑指南!你真的需要一台咖啡机吗? 周日再来首钢园
SpringBoot下载文件打不开问题 — 故事的程序猿
猿1993 · 2026-07-22 · via 故事的程序猿

把模板文件放在了工作目录/resource/excel/OTS参数配置模板.xlsx,然后增加接口下载该模板,但是使用wps打不开!

下载代码:

public void exportOTSParamTemplate(HttpServletResponse response) {
        final String TEMPLATE_PATH = "excel/OTS参数配置模板.xlsx";
        final String DOWNLOAD_FILENAME = "OTS参数配置模板.xlsx";
        ClassPathResource resource = new ClassPathResource(TEMPLATE_PATH);
        if (!resource.exists()) {
            logger.error("OTS参数模板文件不存在: {}", TEMPLATE_PATH);
            throw new RuntimeException("模板文件不存在!");
        }
        try (InputStream inputStream = resource.getInputStream();
             OutputStream outputStream = response.getOutputStream()) {
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
            response.setHeader("Content-Disposition",
                    "attachment; filename=\"" + URLEncoder.encode(DOWNLOAD_FILENAME, StandardCharsets.UTF_8.name()) + "\"");
            StreamUtils.copy(inputStream, outputStream);
            outputStream.flush();
            logger.info("OTS参数模板下载成功!");
        } catch (IOException e) {
            log.error("导出OTS参数模板失败", e);
            throw new RuntimeException("模板下载失败,请稍后重试", e);
        }
    }

报错:

首先确定你的模板文件可以用wps打开,然后再检查一下你的模板文件和下载文件的大小,如果下载的文件比你模板文件大一些,那么恭喜你和我的问题一样。

原因:

xlsx 模板在 Maven 打包时被资源过滤(resource filtering)当文本处理了,导致二进制结构损坏。xlsx 本质是一个 ZIP 容器,Maven 默认会对 src/main/resources 下的文件做占位符替换和字符集转码,非 ASCII 字节会被替换或丢弃,ZIP 签名和 CRC 校验一坏,WPS/Excel 就直接报“文件已损坏”。

所以需要在maven中增加配置忽略上面的默认配置。在插件配置中,增加如下插件配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
            <nonFilteredFileExtension>xls</nonFilteredFileExtension>
            <nonFilteredFileExtension>doc</nonFilteredFileExtension>
            <nonFilteredFileExtension>docx</nonFilteredFileExtension>
            <nonFilteredFileExtension>pdf</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

响应头可以再标准一下:

// xlsx 的标准 MIME 类型
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
// 兼容各浏览器的文件名编码写法
String encodedFileName = URLEncoder.encode(DOWNLOAD_FILENAME, StandardCharsets.UTF_8.name()).replaceAll("\\+", "%20");

然后下载文件就没有问题啦~🎉

扫码分享扫码分享

文章标题:SpringBoot下载文件打不开问题

侵权提示:部分信息可能来源于网络。如发现有侵权,请随时联系删除!