ajax调接口处理表格(easyExcel)

Kent_Sun 等级 808 0 0
标签: ajax接口Java

ajax调接口处理表格

show you my codes.

页面新增按钮

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=GB2312"/>
    <title>中登网信息导入</title>
</head>
<body>
<div style="width:90%;margin-top:5px;margin-left: 40px">
    <table style="width:100%;">
        <tr>
            <td>
                <div style="margin-top:5px;margin-left:10px;">
                    <font style="font-size:16px;color:#6FB3E0;">
                        上传中登网信息文件,点击【导入】进行上传,仅支持.xlsx或.xls格式。
                    </font>
                </div>
            </td>
        </tr>
    </table>
</div>
<div style="width:90%;margin-top:5px;margin-left: 60px">
    <table style="width:100%;">
        <tr>
            <td>
                <form id="uploadForm" enctype="multipart/form-data" method="post">
                    <input id="file" type="file" name="file" accept=".xls,.xlsx">
                </form>
            </td>
            <td>
                <input type="button" id="upload" value="导入">
            </td>
            <td></td>
            <td></td>
        </tr>
    </table>
</div>
<br>

<script type="text/javascript" language="JavaScript">

    $('#upload').click(function () {
        let formData = new FormData($('#uploadForm')[0]);
        if(document.getElementById('file').files[0] == null){
            alert("请选择一个要上传的文件!");
            return;
        }
        $.ajax({
            type: 'POST',
            url: '/mogo/api/netRegister/netRegisterExcelDetail',
            data: formData,
            cache: false,
            processData: false,
            contentType: false,
        }).success(function (data) {
            if (data.code === '0000') {
                alert("导入成功!");
                document.getElementById('uploadForm')&&document.getElementById('uploadForm').reset();
            } else {
                alert("导入失败!");
            }
        }).error(function () {
            alert("导入失败");
        });
    });
</script>
</body>
</html>

接口编写

controller

@Controller
@Slf4j
@RequestMapping("/netRegister")
public class NetRegisterController {

    @Autowired
    NetRegisterInformationService netRegisterInfoService;

    @RequestMapping("/netRegisterExcelDetail")
    @ResponseBody
    public GeneralResponse zdwExcelDetail(@RequestParam("file") MultipartFile file) throws IOException {
        return netRegisterInfoService.zdwExcelDetail(file);
    }
}

serviceImpl

/**
     * 中登网excel文件操作
     *
     * @param file excel表格文件
     */
    @Override
    public GeneralResponse zdwExcelDetail(MultipartFile file) throws IOException {
        if (file.isEmpty()) {
            return GeneralResponse.fail("文件为空!");
        }
        int begin = file.getOriginalFilename().indexOf(".");
        int last = file.getOriginalFilename().length();
        String extension = file.getOriginalFilename().substring(begin, last);
        if (".xlsx".equals(extension) || ".xls".equals(extension)) {
            // excel数据读取并存到数据库中
            EasyExcel.read(file.getInputStream(), NetRegisterEntity.class, new NetRegisterInfoListener(this)).sheet().doRead();
        }
        return GeneralResponse.success();
    }

service


public interface NetRegisterInformationService {
 /**
     * 中登网excel文件操作
     *
     * @param file excel表格文件
     */
    GeneralResponse zdwExcelDetail(MultipartFile file) throws IOException;
}

实体类


@Data
public class NetRegisterEntity {
    /**
     * 申请编号
     */
    private String asqbh;

    /**
     * 中登网修改码
     */
    @ExcelProperty(index = 1)
    private String contractNo;
    /**
     * 中登网修改码
     */
    @ExcelProperty(index = 13)
    private String modificationCode;
    /**
     * 中登网编号
     */
    @ExcelProperty(index = 14)
    private String netNumber;
    /**
     * 登记日期
     */
    @ExcelProperty(index = 15)
    @DateTimeFormat("yyyy/MM/dd")
    private String registerDate;
}

监听器


@Slf4j
public class NetRegisterInfoListener extends AnalysisEventListener<NetRegisterEntity> {
    private static final Logger LOGGER = LoggerFactory.getLogger(NetRegisterInfoListener.class);

    /**
     * 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
     */
    private static final int BATCH_COUNT = 520;
    List<NetRegisterEntity> list = new ArrayList<NetRegisterEntity>();
    private int failSum = 0;
    private int successSum = 0;

    /**
     * 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。
     */
    private NetRegisterInformationService service;

    /**
     * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
     *
     * @param service
     */
    public NetRegisterInfoListener(NetRegisterInformationService service) {
        this.service = service;
    }

    /**
     * 会一行行得返回头
     *
     * @param headMap
     * @param context
     */
    @Override
    public void invokeHead(Map<Integer, CellData> headMap, AnalysisContext context) {
//        log.info("解析到一条头数据:{}", JSON.toJSONString(headMap));
    }

    /**
     * 这个每一条数据解析都会来调用
     *
     * @param data
     * @param analysisContext
     */
    @Override
    public void invoke(NetRegisterEntity data, AnalysisContext analysisContext) {
        list.add(data);
        // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
        if (list.size() >= BATCH_COUNT) {
            saveData();
            // 存储完成清理 list
            list.clear();
        }
    }

    /**
     * 数据解析完了开始调用
     *
     * @param analysisContext
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // 这里也要保存数据,确保最后遗留的数据也存储到数据库
        saveData();
        log.info("所有数据解析完成!成功条数:{}, 失败条数:{}", successSum, failSum);
    }

    /**
     * 存储数据库
     */
    private void saveData() {
        log.info("{}条数据,开始存储数据库!", list.size());
        Map<String, List<String>> map = service.saveOrUpdate(list);
        failSum += map.get("fail").size();
        successSum += map.get("success").size();
        log.info("存储数据库成功!");
    }
}

示例文档

https://www.yuque.com/sunchenpeng/hvrfpu/10490230

收藏
评论区

相关推荐

ajax调接口处理表格(easyExcel)
ajax调接口处理表格 show you my codes. 页面新增按钮 html <DOCTYPE html <html lang"en" <head <meta httpequiv"ContentType" content"text/html; charsetGB2312"/ <title中登网信息导入</title <
ajax
ajax定义 :异步的JavaScript 和 XML 是一种综合技术:运用了XMLHTTPRequest (xhr) 和服务器交换数据,通过JavaScript 局部渲染页面,从而实现异步的局部更新 同步与异步同步 代码按顺序执行,会阻塞代码执行(alert) 异步 不会阻塞代码 XMLHTTPRequest xhrjs var xhr new
AJAX
我们知道,根据浏览器的保护规则,跨域的时候我们创建的sessionId是不会被浏览器保存下来的,这样,当我们在进行跨域访问的时候,我们的sessionId就不会被保存下来,也就是说,每一次的请求,服务器就会以为是一个新的人,而不是同一个人,为了解决这样的办法,下面这种方法可以解决这种跨域的办法。 我们自己构建一个拦截器,对需要跨域访问的request头部重
JavaEE从服务器端解决Ajax跨域问题
1、Ajax跨域简介   1、指的是浏览器不能执行其他网站的脚本。是浏览器施加的安全限制。js本身不跨域,使用form表单和iframe直接请求,是不会跨域的;   2、只要两个url的协议、域名、端口其中有一个不同,从其中一个url中使用ajax请求另一个url,则属于Ajax跨域;   3、ajax请求接口,只是不能进入回调函数,接口还是可以正常请
java第五周
AJAX的工作原理及其工作原理: ### 1.定义及工作原理   AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。AJAX 不是新的编程语言,而是一种使用现有标准的新方法。AJAX 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行。   AJAX 是一种用于
AJAX与Django
AJAX ---- #### 什么是AJAX? AJAX不是JavaScript的规范,它的缩写:Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求。提交任务之后,不原地等待,直接执行下一行代码,任务的返回通过回调机制。 局部刷新,不整体刷新,而是界面莫个地方局部刷新 #### AJAX原理
AjaxPro.dll,asp.net 前台js调用后台方法(无刷新)
1、什么是Ajax --------- Ajax是异步Javascript和XML(Asynchronous JavaScript and XML)的英文缩写。"Ajax"这个名词的发明人是Jesse James Garrett,而大力推广并且使Ajax技术炙手可热的是Google。Ajax的核心理念在于使用XMLHttpRequest对象发送异步请求。
Ajax各个参数的说明
Ajax各个参数的说明 $.ajax({      url: "http://www.hzhuti.com",    //请求的url地址      dataType: "json",   //返回格式为json      async: true, //请求是否异步,默认为异步,这也是ajax重要特性    
Ajax快速入门
最近需要使用ajax,json传数据,快速学习了下ajax,把基本的东西拿出来分享一下,打算以问题的形式来进行文章的编写~go! (一)什么是Ajax? Ajax是一种无需加载整个网页,快速刷新局部网页的技术。Ajax不是新的编程语言,而是一些老技术的融合。 (二)Ajax用到了什么技术? 异步数据获取技术:使用XMLHttpReques
Django之form表单
1\. 内容回顾 ======== ![](https://oscimg.oschina.net/oscnet/ab5776dc4428b63ab33208c1ca0d0a2f5ce.jpg) ![](https://oscimg.oschina.net/oscnet/65ef43693eb11c302d92f756bcf69e3469b.jpg)
Django框架 之 Ajax
Django框架 之 Ajax =============== 浏览目录 ==== * AJAX准备知识 * AJAX与XML的比较 * AJAX简介 * jQuery实现的ajax * AJAX参数 * AJAX请求如何设置csrf\_token * 序列化
Django的日常
\[toc\] Django的日常-AJAX ============== AJAX简介 ------ 首先AJAX是一种无需重新加载整个网页的前提下,能够更新部分网页的技术,他并不是一种新的编程语言,而是一种使用现有标准的新方法,是基于原生JavaScript开发的,他可以用于创建快速动态网页. AJAX最大的特点就是局部刷新以及异步提交,局部刷新
Django(十二)视图
一、Ajax基本概念 ========== 【参考】:[https://www.runoob.com/jquery/jquery-ajax-intro.html](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fwww.runoob.com%2Fjquery%2Fjquery-ajax-i
Krabber
Krabber是kVitrail的网页抽取工具。 Krabber的设计目标是提供一个可以为Java应用调用的、可以执行网页上的JavaScript代码、并返回JavaScript代码执行后的网页的HTML代码的网页抽取工具。 java模拟AJAX [http://sourceforge.net/projects/kvitrail/](https://w
Spring MVC Controller 接收ajax传来的数组参数
Spring MVC Controller 接收ajax传来的数组参数 =================================== var arry = ['1','2','3']; //就是最普通的jquery ajax向后台直接发送数据 $.ajax({ type:'post', ur