spring 工程中模版文件下载

发布时间 2023-12-28 10:57:30作者: 品书读茶

文件放置位置

将模版文件放到resources下,如果要加文件夹不要命名为:template

代码

import org.springframework.core.io.ClassPathResource;
import javax.servlet.ServletOutputStream;
import java.io.ByteArrayOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;

@PostMapping("/downTemplete")
    @ApiOperation("下载模板")
    public void downTemplete(HttpServletResponse response) {
        InputStream inputStream = null;
        try (ServletOutputStream outputStream = response.getOutputStream()) {
            //设置响应头信息,包括下载后的文件名和编码等
            response.addHeader("content-disposition", String.format("attachment;filename= %s", URLEncoder.encode("人员费用明细导入模板.xlsx", "utf-8")));
            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            response.setCharacterEncoding("UTF-8");
            //在文件夹里获取到文件并转为流
            inputStream = new ClassPathResource("templates/CostWorkers.xlsx").getInputStream();
            byte[] b = streamToByteArray(inputStream);
            outputStream.write(b);
        } catch (Exception e) {
            log.error("下载模板异常", e);
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    log.error("关闭流异常", e);
                }
            }
        }
    }

    private byte[] streamToByteArray(InputStream inputStream) throws IOException {
        try(ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
            return outputStream.toByteArray();
        } catch (Exception e) {
            return null;
        } 
    }