pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>wsp-test</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.4</version><relativePath/> <!-- lookup parent from repository --></parent><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- easyexcel 依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version><exclusions><exclusion><artifactId>poi</artifactId><groupId>org.apache.poi</groupId></exclusion><exclusion><artifactId>poi-ooxml</artifactId><groupId>org.apache.poi</groupId></exclusion><exclusion><artifactId>poi-ooxml-schemas</artifactId><groupId>org.apache.poi</groupId></exclusion></exclusions></dependency><!-- excel工具 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version></dependency></dependencies>
</project>

controller

package com.peng.controller;import com.alibaba.excel.EasyExcel;
import com.alibaba.fastjson.JSON;
import com.peng.excel.excelDto.UserExcelDto;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.peng.service.UserService;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;@RestController
@RequestMapping("/test/download")
public class DownloadController {@Autowiredprivate UserService userService;/*** 文件下载并且失败的时候返回json(默认失败了会返回一个有部分数据的Excel)** @since 2.1.1*/@GetMapping("/downloadImport")public void downloadImportGoods(HttpServletResponse response) throws IOException {try {response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系  第一个参数是设置excel导出后名字String fileName = URLEncoder.encode("导入用户上传模板", "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");// 这里需要设置不关闭流                                                                                         这里是excel左下角名字EasyExcel.write(response.getOutputStream(), UserExcelDto.class).autoCloseStream(Boolean.FALSE).sheet("导入用户上传模板").doWrite(userService.getImportUserData());} catch (Exception e) {// 重置responseresponse.reset();response.setContentType("application/json");response.setCharacterEncoding("utf-8");Map<String, String> map = new HashMap<String, String>();map.put("status", "failure");map.put("message", "下载文件失败" + e.getMessage());response.getWriter().println(JSON.toJSONString(map));}}
/**** 批量导入商品* @param file* @return* @throws IOException*/
@RequestMapping(value = "/batchImportGoods", method = RequestMethod.POST)
public Result<Object> batchImportGoods(@RequestPart("file") MultipartFile file) throws Exception {EasyExcel.read(file.getInputStream(), UserExcelDto.class, new UserImportDataListener(userService)).sheet().doRead();// Map resultInfo = redisCache.getCacheObject("importGoodsResult");// redisCache.deleteObject("importGoodsResult");return Result.success(null);
}
}

实体类

package com.peng.excel.excelDto;import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;@Data
@EqualsAndHashCode
public class UserExcelDto {@ExcelProperty(value = "用户名")private String userName;@ExcelProperty(value = "密码")private String password;@ExcelProperty(value = "年龄")private String age;@ExcelProperty(value = "性别")private String sex;@ExcelProperty(value = "地址")private String address;}

service

package com.peng.service;import com.peng.excel.excelDto.UserExcelDto;
import java.util.List;public interface UserService {/*** 下载excel模板*/List getImportUserData();/*** 批量导入*/void AddImportUserData(List<UserExcelDto> list);
}

impl

package com.peng.service.impl;import com.peng.excel.excelDto.UserExcelDto;
import org.springframework.stereotype.Service;
import com.peng.service.UserService;import java.util.ArrayList;
import java.util.List;@Service
public class UserServiceImpl implements UserService {/*** excel模板下载* @return*/@Overridepublic List getImportUserData() {List<UserExcelDto> list = new ArrayList<>();UserExcelDto userExcelDto = new UserExcelDto();userExcelDto.setUserName("请输入名称");userExcelDto.setPassword("请输入密码");userExcelDto.setAge("年龄");userExcelDto.setSex("性别");userExcelDto.setAddress("地址");list.add(userExcelDto);return list;}/*** excel批量导入* @param list*/@Overridepublic void AddImportUserData(List<UserExcelDto> list) {if (list.size() >0 && list != null){list.forEach(obj->{System.out.println(obj);});}}
}

application 启动类

package com.peng;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class WspApplicationApp {public static void main(String[] args) {SpringApplication.run(WspApplicationApp.class,args);}
}

postmain测试

成品

excel批量上传

监听器

package com.peng.utils.excelListener;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.peng.excel.excelDto.UserExcelDto;
import com.peng.service.UserService;import java.util.ArrayList;
import java.util.List;
//监听器
public class UserImportDataListener extends AnalysisEventListener<UserExcelDto> {/*** 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收*/private static final int BATCH_COUNT = 3000;/*** 缓存的数据*/private List<UserExcelDto> list = new ArrayList<>(BATCH_COUNT);private UserService userService;/*** 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来** @param userService*/public UserImportDataListener(UserService userService) {this.userService = userService;}@Overridepublic void invoke(UserExcelDto data, AnalysisContext analysisContext) {list.add(data);// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOMif (list.size() >= BATCH_COUNT) {saveData();// 存储完成清理 listlist = new ArrayList<>(BATCH_COUNT);}}@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {// 这里也要保存数据,确保最后遗留的数据也存储到数据库saveData();}/*** 加上存储数据库*/private void saveData() {//调用service接口方法存储数据userService.AddImportUserData(list);}
}

项目结构

要导入的excel表格

postman上传设置

excel下载模板 批量上传相关推荐

  1. 学习EasyExcel实现excel文件的批量上传的笔记

    参考官网上的内容 ​ 官网地址如下: ​ https://yuque.com/easyexcel ​ git地址: ​ https://gitcode.net/mirrors/alibaba/easy ...

  2. ftp服务器批量上传文件,bat批量上传ftp文件到服务器

    bat批量上传ftp文件到服务器 内容精选 换一换 CDM支持周期性自动将新增文件上传到OBS,不需要写代码,也不需要用户频繁手动上传即可使用OBS的海量存储能力进行文件备份.这里以CDM周期性备份F ...

  3. 下载批量上传试题的模板

    来源于老师讲课的项目中 /// /// 1.1下载批量上传试题的模板 /// /// public ActionResult DownloadTemplet() { string path = Ser ...

  4. 电商前台模板中文html5_跨境电商平台上产品如何上传?虾皮新版批量上传工具使用指南分享...

    大家好,这里是天师跨境,今天来为电商新人们解答一下关于如何在跨境电商平台上上传产品的疑惑,顺便介绍一下虾皮跨境平台的新版批量上传工具是如何使用的. 在跨境电商平台上开店的新手们在入驻成功后,一般最先面 ...

  5. java批量上传文件_Spring Boot2(十四):单文件上传/下载,文件批量上传

    文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...

  6. sftp shell 批量上传文件_shell脚本进行sftp、ftp文件批量上传与下载

    SFTP传送:若使用SecureCRT,按下ALT+P开启新的会话即进行sftp操作 输入help命令,显示该SFTP提供所有的命令cd 路径 更改远程目录到"路径" lcd 路径 ...

  7. 用FTP命令进行文件批量上传或下载

    1.进入DOS命令:win+r,输入cmd 2.输入:ftp,回车 3.open IP地址 4.输入用户名,回车:输入密码,回车: 5.切换ftp服务器的目录,进入到要下载的目录下. 6.选择文件下载 ...

  8. smartupload java_java servlet通过SmartUpload开发文件批量上传、批量下载源码分享

    前几天用基础http协议实现单个文件的上传和下载,发现并不能满足项目的需求,比如一次上传下载多个文件.或者是限制上传文件的格式等.于是看了看SmartUpload这个打包好的组件,感觉还不错,分享给大 ...

  9. php图片批量上传插件下载,jQuery的多图片批量上传插件

    jQuery的多图片批量上传插件 js代码 $(function(){ //上传图片 var $tgaUpload = $('#goodsUpload').diyUpload({ url:'uploa ...

最新文章

  1. 乐观锁与悲观锁——解决并发问题
  2. iOS架构-静态库.a的打包及使用(2)
  3. PAT (Basic Level) Practise 1040 有几个PAT(DP)
  4. 为什么人们默认 x86 代表 32 位处理器
  5. MySQL数据库操作指令
  6. Android 音频焦点(Audio Focus)
  7. 程序入口地址的直接定制表【 (1) 清屏(2) 设置前景色 (3) 设置背景色 (4) 向上滚动一行】...
  8. PackageManager hasSystemFeature
  9. 神经网络,英文字母识别
  10. 【朝花夕拾】Lint篇
  11. 【机器学习】可决系数R^2和MSE,MAE,SMSE
  12. STM32连接WIFI-ESP8266获取天气信息---STA模式运用
  13. git cherry-pick 的时候出现git cherry-pick xxx  fatal: bad object xxx
  14. 未来已来!阿里小蜜AI技术揭秘
  15. 区块链相关数据报表_一种基于区块链的财务报表系统及其使用方法与流程
  16. 树莓派之更改开机画面
  17. Arista思科网络专利案,Arista又赢一回合
  18. 图像仿射变换原理5:组合变换矩阵的OpenCV-Python实现
  19. 宽屏透明html5产品展示模板
  20. 2021ccpc威海H city safety(最小割,最大权闭合子图)

热门文章

  1. Ubuntu文件写入内容时出现错误 E121:无法打开并写入文件解决方案
  2. 上周还是合意的,且找到了一定的遵循4.6-4.12
  3. Spring MVC注解、标签库、国际化
  4. 学习笔记: apply、call、bind的使用
  5. 汇美 LQ-300K+ 打印机驱动
  6. 神舟战神笔记本:win10 安装 ubuntu 双系统
  7. Linux (二) 虚拟机 CentOS8 静态IP设置
  8. vb小钢琴简谱播放程序代码
  9. Cocos2d-X3.4开发三消类游戏(1)--准备工作及开始界面的制作
  10. 如何选择MySQL的备份工具