下载模板
前提:在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 时代” 到来,消费者对 “高营养…
金碟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 应用的开…