下载模板

news/2025/10/11 9:39:32/文章来源:https://www.cnblogs.com/blackdd/p/19134324

下载模板

前提:在resource目录下创建template文件夹,存放模板文件:

以下方法无入参:

try {
// 模板文件路径 - 使用classpath方式访问资源文件
String templatePath = "template/xxx模板.docx";

// 使用ClassPathResource访问resources目录下的文件
Resource resource = new ClassPathResource(templatePath);

if (!resource.exists()) {
log.error("模板文件不存在: {}", templatePath);
return new ResponseEntity<>("模板文件不存在", HttpStatus.NOT_FOUND);
}

// 读取文件内容 - 兼容JAR包部署
byte[] fileContent;
try {
// 优先尝试通过InputStream读取(兼容JAR包)
fileContent = StreamUtils.copyToByteArray(resource.getInputStream());
} catch (Exception e) {
log.warn("通过InputStream读取失败,尝试通过File读取: {}", e.getMessage());
// 降级到File方式读取
fileContent = Files.readAllBytes(resource.getFile().toPath());
}

// 设置响应头
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");

// 处理中文文件名编码,确保在不同浏览器中都能正确显示
String fileName = "xxx模板.docx";
String encodedFileName;
try {
// 尝试UTF-8编码
encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"; filename*=UTF-8''" + encodedFileName);
} catch (Exception e) {
// 如果编码失败,使用原始文件名
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
}

response.setContentLength(fileContent.length);

// 写入响应流
response.getOutputStream().write(fileContent);
response.getOutputStream().flush();

log.info("模板下载成功: {}", templatePath);
return new ResponseEntity<>(HttpStatus.OK);

} catch (Exception e) {
log.error("下载模板失败", e);
return new ResponseEntity<>("下载模板失败: " + e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/934583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis Stack搭建

参考 https://redis.io/docs/latest/operate/oss_and_stack/install/archive/install-stack/docker/环境查看 系统环境# cat /etc/redhat-release Rocky Linux release 9.3 (Blue Onyx) # uname -a Linux Rocky9Milvu…

CISA与USCG在关键基础设施威胁狩猎中发现网络安全改进领域

CISA和美国海岸警卫队通过对美国关键基础设施组织进行主动威胁狩猎,识别出多个网络安全风险领域,包括凭据存储不当、网络分段不足和日志记录不充分等问题,并提供了具体的技术缓解建议。CISA与USCG在关键基础设施威胁…

2025年智慧物联与电子信息工程国际学术会议(IoTEIE 2025)

2025年智慧物联与电子信息工程国际学术会议(IoTEIE 2025) 2025 International Conference on Artificial Intelligence of Things and Electronic Information Engineering 在科技飞速发展的当下,物联网与电子信息工程…

重磅更新:Claude Code 现在支持插件啦!!

大家好,我是R哥。 刚 Anthropic 宣布了一个重磅消息:Claude Code 现在正式支持插件(Plugins)啦! 这个插件不是指 IDEs 中的插件,而是指命令行窗口中的 /plugin 插件命令,通过这一条命令就能一键装好别人封装好的…

标签的关系,注释,标题标签和段落标签,文本格式化标签

<html>和<head><body>是父子关系,<head>和<body>是并列关系 ctrl+/添加注释 标题标签:<h2>~<h6>没有使用次数限制 段落标签: (双标签)

笔记本使用摄像头显示“你的相机报告设备上的开关或按钮已阻止或关闭它”(特别是联想笔记本)

如果驱动权限这类都没问题,那么看看摄像头旁边或者电脑键盘侧面有没有小开关物理锁住了。https://www.bilibili.com/video/BV1QbmiY1E2p/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_…

牛客刷题-Day11

动态规划1:线性dp、背包问题,区间 https://ac.nowcoder.com/acm/contest/24213?from=acdiscuss牛客刷题-Day11 今日刷题:\(1051-1055\) 1051 [HAOI2012]音量调节 题目描述 一个吉他手准备参加一场演出。他不喜欢在…

MySQL - ERROR 2002 (HY000): Cant connect to local MySQL Server through socket /tmp/mysql.sock

MySQL - ERROR 2002 (HY000): Cant connect to local MySQL Server through socket /tmp/mysql.sock这个报错说明 MySQL 客户端没有使用 TCP/IP 去连接远程数据库,而是默认尝试用 UNIX socket 文件 /tmp/mysql.sock 去…

网络编程实践笔记_1_阿贝云_免费云服务器_简单GET_POST实现

网络编程实践 阿贝云 免费云服务器 GET POST尝试一下网络编程,除了局域网版的TCP UDP直接通讯,由于小程序或者更广泛使用需求,想尝试从互联网直接读取存储信息。 直接跳过了本地服务器模拟,选用阿贝云 https://ww…

直播平台开发,如何实现CPU内存使用情况的检测? - 云豹科技

直播平台开发,如何实现CPU内存使用情况的检测?案例需求说明现在每隔3秒对电脑的cpu和内存使用情况进行检测,内存使用率或cpu使用率超过90%给出警告代码如下(仅供参考,案例适用于作者自己MBP)echo "开始监控…

实用指南:FPGA学习笔记——图像处理之对比度调节(直方图均衡化)

实用指南:FPGA学习笔记——图像处理之对比度调节(直方图均衡化)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

第十二届行为与社会计算国际会议(BESC)暨2025年机器学习与社会计算国际研讨会(MLSC 2025)

第十二届行为与社会计算国际会议(BESC)暨2025年机器学习与社会计算国际研讨会(MLSC 2025) 2025 International Symposium on Machine Learning and Social Computing 2025年机器学习与社会计算国际研讨会(MLSC 20…

注解@RequestParam与@RequestBody的使用场景

一、前言 一直有这么一个疑问:在使用postman工具测试api接口的时候,如何使用 json 字符串传值呢,而不是使用 x-www-form-urlencoded 类型,毕竟通过 key-value 传值是有局限性的。假如我要测试批量插入数据的接口呢…

2025 最新推荐!大连深海原种海参源头厂家权威榜:聚焦全产业链优质供应商及选购指南青海淡干/青海围堰/青海圈养/青海吊笼/青海网箱/青海大棚海参厂家推荐

当前海参市场规模持续扩大,但行业乱象成为消费痛点:浅海养殖参冒充深海原种参、加工环节添加防腐剂、溯源体系缺失等问题频发,虚假宣传更让消费者难以辨别品质。随着 “自然鲜养 4.0 时代” 到来,消费者对 “高营养…

博客导航

做题记录 / 思考瓶颈目录(密码均为教练口头禅,\(^*\) 表示已公开,\(^\dag\) 表示已完结):Duel with StayAlone(决斗历史) \(^{*\dag}\)Hey Gift:逃亡公路(2023 年 NOIP 前杂题和互测题杂做) \(^{*\dag}\)Hey…

金碟KIS迷你版v12.0sp1注册补丁/金蝶迷你版破解

程序下载:https://www.123pan.com/s/OxpZVv-2MX8v.html 提取码:ZOBK 补丁下载:https://www.c5d.cn/thread-166-1-1.html声明:本程序收集于网络,仅供站内用户学习交流使用,商用后果自负,请在下载后24小时内自行删…

详细介绍:Hadess入门到实战(3) - 如何管理Npm制品

详细介绍:Hadess入门到实战(3) - 如何管理Npm制品pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

2025 年酒店一次性用品源头厂家最新推荐榜单:含牙签牙线筷子套杯盖等多品类品牌及配套能力与质检体系详解

在酒店行业持续发展的当下,一次性用品作为酒店服务的重要组成部分,其品质、供应效率及环保性直接影响酒店口碑与运营成本。然而当前市场上,部分厂家存在质检体系不完善、产品质量不稳定,配套能力弱导致酒店采购繁琐…

MP4和WMV2压缩机制对比 - 详解

MP4和WMV2压缩机制对比 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco"…

Rokid JSAR开发:开发实现小游戏语音控制

@目录部署环境实战开发:分步骤实现:搭积木小游戏搭建基础项目结构积木逻辑语音控制总结 前言:Rokid JSAR 平台以其轻量化、高效率、易上手的特性,让开发者无需深入钻研复杂的底层技术,就能快速投身于 AR 应用的开…