模板下载
<a href="${pageContext.request.contextPath}/templateFile/download.do?templateId=1">模板下载</a>
package com.cango.erp.cs.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
@RestController
@RequestMapping("/templateFile")
@Slf4j
public class TemplateFileController {
@Autowired
ResourceLoader resourceLoader;
/**
* 模板名称Map key: 模板ID value:模板名称
*/
private static Map<String, String> templateName = new HashMap<>();
static {
// 外包案件分配导入模板
templateName.put("1", "外包案件分配导入模板.xlsx");
}
@RequestMapping(value = "/download.do", method = RequestMethod.GET)
public void declareInfoExport(HttpServletRequest request, HttpServletResponse response) throws Exception {
final String templateId = request.getParameter("templateId");
if (!templateName.containsKey(templateId)) {
throw new RuntimeException("模板不存在");
}
// 文件名
String filename = templateName.get(templateId);
Resource resource = resourceLoader.getResource("classpath:/template/download/" + filename);
try (InputStream inputStream = resource.getInputStream()) {
response.setContentType("application/force-download");
//保证下载时文件名为指定文件名,避免中文文件名乱码
response.addHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(filename, "utf-8"));
ServletOutputStream outputStream = response.getOutputStream();
byte[] b = new byte[2048];
int len;
//从输入流中读取一定数量的字节,并将其存储在缓冲区字节数组中,读到末尾返回-1
while ((len = inputStream.read(b)) > 0) {
outputStream.write(b, 0, len);
}
} catch (Exception e) {
log.error("【文件下载】异常:{}", e);
throw new RuntimeException("文件下载失败");
}
}
}
不积跬步,无以至千里;不积小流,无以成江海。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具