Java下载excel模板文件

一、前言

最近做了一个导入Excel的功能,需求:

  1. 先提供一个下载Excel模板的功能。
  2. 用户下载好模板后,可以在模板文件当中填写要上传的内容,填写完过后再进行导入Excel,然后将用户填写的数据保存到数据库当中。

二、下载模板

1.将模板放到resources目录下,尽量创建一个专门的文件夹来存放模板,如下:

2.这里我用到了两个依赖,一个是hutool目前最火的工具类,easyexcel基本上导入导出Excel都会用。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.18</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.2.1</version>
</dependency>
@GetMapping("/downInChargeOfTemplate")
public void downInChargeOfTemplate(HttpServletResponse response) {
    downloadService.downInChargeOfTemplate(response);
}
import cn.hutool.core.io.IoUtil;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

@Service
public class DownloadService {
    public void downInChargeOfTemplate(HttpServletResponse response) {
        responseSetting(response, "各分任务负责人导入模板", ".xlsx",
                "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");

        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            // 读取文件的输入流
            inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/各分任务负责人导入模板.xlsx");
            XSSFWorkbook wb = new XSSFWorkbook(inputStream);
            outputStream = response.getOutputStream();
            wb.write(outputStream);
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            IoUtil.close(inputStream);
            IoUtil.close(outputStream);
        }
    }

    public void responseSetting(HttpServletResponse response, String fileName, String suffix, String contentType) {
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String newFileName = null;
        try {
            newFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        // 当客户端请求的资源是一个可下载的资源(这里的“可下载”是指浏览器会弹出下载框或者下载界面)时,对这个可下载资源的描述(例如下载框中的文件名称)就是来源于该头域。
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + newFileName + suffix);
        // 服务器告诉浏览器它发送的数据属于什么文件类型,也就是响应数据的MIME类型
        response.setContentType(contentType);
        response.setCharacterEncoding("utf-8");
        // 关闭缓存(HTTP/1.1)
        response.setHeader("Cache-Control", "no-store");
        // 关闭缓存(HTTP/1.0)
        response.setHeader("Pragma", "no-cache");
        // 缓存有效时间
        response.setDateHeader("Expires", 0);
    }
}

3.测试接口

4.补充知识

在拿到文件的InputStream输入流之后我们也可以不通过XSSFWorkbook将输入流写到输出流当中,可以直接使用流拷贝的方式,这种同样是可以完成导出模板功能的。

在这里插入图片描述

三、Excel导入

关于导入功能,直接参考easyexcel官网即可:https://easyexcel.opensource.alibaba.com/docs/current/quickstart/read

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
以下是使用Java下载Excel模板的示例代码: ```java import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; public class ExcelTemplateDownloader { public static void main(String[] args) { String fileUrl = "https://example.com/template.xlsx"; // Excel模板文件的URL String saveDir = "C:/downloads/"; // 文件保存目录 try { downloadFile(fileUrl, saveDir); System.out.println("Excel模板下载成功!"); } catch (IOException e) { System.out.println("Excel模板下载失败!" + e.getMessage()); } } public static void downloadFile(String fileUrl, String saveDir) throws IOException { URL url = new URL(fileUrl); URLConnection connection = url.openConnection(); InputStream inputStream = connection.getInputStream(); byte[] buffer = new byte[1024]; int length; String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1); File file = new File(saveDir); if (!file.exists()) { file.mkdirs(); } FileOutputStream outputStream = new FileOutputStream(saveDir + fileName); while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } outputStream.close(); inputStream.close(); } } ``` 在上面的代码中,我们定义了一个名为 `downloadFile` 的方法,它使用 Java 的 URL 和 URLConnection 类来从指定的 URL 下载 Excel 模板文件,并将其保存到指定的本地目录中。在 `main` 方法中,我们可以使用这个方法来下载我们需要的 Excel 模板文件。注意,我们需要提供 Excel 模板文件的URL和本地保存目录。 你可以根据实际情况修改 `fileUrl` 和 `saveDir` 变量,以便在你的Java应用程序中下载Excel模板文件
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪 咖@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值