模板下载

<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("文件下载失败");
        }
    }
}

posted @   亲爱的阿道君  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示