`
apple578994358
  • 浏览: 2963 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Easyexcel用法及Rest接口实现文件上传

 
阅读更多
依赖jar包
<dependency>
   <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>1.1.2-beat1</version>
  </dependency>
 
  <dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-multipart-provider</artifactId>
<version>3.0.18.final</version>
<exclusions>
<exclusion>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</exclusion>
</exclusions>
</dependency>
 

代码
package com.chinacreator.c2.mop.resource.web.rest;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;

import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.metadata.Sheet;
import com.alibaba.fastjson.JSONObject;

import com.chinacreator.c2.util.UUIDUtil;
import com.chinacreator.c2.web.exception.InvalidRestParamException;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import io.swagger.annotations.SwaggerDefinition;
import io.swagger.annotations.Tag;

import com.chinacreator.c2.mop.resource.Deviceinfo;
import com.chinacreator.c2.mop.resource.Optnodeinfo;
import com.chinacreator.c2.mop.resource.Subdeviceinfo;
import com.chinacreator.c2.mop.resource.readmodel.DeviceInfoReadModel;
import com.chinacreator.c2.mop.resource.readmodel.DeviceSubInfoReadModel;
import com.chinacreator.c2.mop.resource.readmodel.OptNodeInfoReadModel;
import com.chinacreator.c2.mop.resource.service.DeviceinfoService;
import com.chinacreator.c2.mop.resource.service.OptnodeinfoService;

import com.chinacreator.c2.mop.resource.service.SubdeviceinfoService ;
@Controller
@Api("资源导入")
@Path("mop/v1/resources")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@SwaggerDefinition(tags = {@Tag(name = "ResourceImport", description = "资源导入")})
@ApiResponses(value = {@ApiResponse(code = 400, message = "错误的请求参数", response = Error.class),
@ApiResponse(code = 404, message = "操作失败,资源未找到", response = Error.class),
@ApiResponse(code = 500, message = "系统内部错误", response = Error.class)})
public class ResourceImport {
@Autowired
private DeviceinfoService deviceinfoService;

@Autowired
private SubdeviceinfoService subdeviceinfoService;

@Autowired
private OptnodeinfoService optnodeinfoService;


   public static final String DEVICE_INFO = "deviceinfo";
  
   public static final String DEVICE_SUB_INFO = "devicesubinfo";
  
   public static final String OPT_NODE_INFO = "optnodeinfo";



@POST
@Path("/{resourcetype}")
@Produces({ MediaType.APPLICATION_JSON })
@Consumes({ MediaType.MULTIPART_FORM_DATA })
@ApiOperation(value = "预览导入运维资源excel文件(文件要放在请求头里面,文件的参数名为files)", tags = "运维资源导入", notes = "运维资源导入(文件要放在请求头里面,文件的参数名为files)")
public   boolean importOptNodeInfo(@PathParam("resourcetype") String resourcetype,
                           @ApiParam(value = "上传的文件", name = "files") @Context HttpServletRequest request
)  {
  boolean bool=false;
  if(DEVICE_INFO.equals(resourcetype)) {
   List<Object> data=getParseExcelObject(DeviceInfoReadModel.class, request);
   List<Deviceinfo> deviceInfos=new ArrayList<Deviceinfo>();
   List<String> lst=new ArrayList<String>();
   for (Object ob : data) {
   Deviceinfo deviceInfo= JSONObject.parseObject(ob.toString(),Deviceinfo.class);
   String id=deviceInfo.getDevid();
   if("null".equals(id)) {
   throw new InvalidRestParamException("导入的资产编号不能为空");
   }
   deviceInfos.add(deviceInfo);
   lst.add(id);
    }
  List<String> ls= deviceinfoService.getAllId();
  for (String string : ls) {
  for (String string1 : lst) {
  if(string.equals(string1)) {
  bool=false;
  throw new InvalidRestParamException("excel中存在重复的数据,设备ID为"+string);
  }
}

}
   deviceinfoService.insertBatch(deviceInfos);
   bool=true;
  }
 
  if(DEVICE_SUB_INFO.equals(resourcetype)) {
   List<Object> data=getParseExcelObject(DeviceSubInfoReadModel.class, request);
   List<Subdeviceinfo> subdeviceinfos=new ArrayList<Subdeviceinfo>();
   List<String> lst=new ArrayList<String>();
   for (Object ob : data) {
   Subdeviceinfo subdeviceinfo= JSONObject.parseObject(ob.toString(),Subdeviceinfo.class);
   subdeviceinfos.add(subdeviceinfo);
   String id=subdeviceinfo.getSubdevid();
   if("null".equals(id)) {
   throw new InvalidRestParamException("导入的子资产编号不能为空");
   }
   lst.add(id);
    }
  List<String> ls= subdeviceinfoService.getAllId();
  for (String string : ls) {
  for (String string1 : lst) {
  if(string.equals(string1)) {
  bool=false;
  throw new InvalidRestParamException("excel中存在重复的数据,子资源编号为"+string);
  }
}
}
  subdeviceinfoService.insertBatch(subdeviceinfos);
   bool=true;
  }
  if(OPT_NODE_INFO.equals(resourcetype)) {
   List<Object> data=getParseExcelObject(OptNodeInfoReadModel.class, request);
   List<Optnodeinfo> optnodeinfos=new ArrayList<Optnodeinfo>();
   for (Object ob : data) {
   Optnodeinfo optnodeinfo= JSONObject.parseObject(ob.toString(),Optnodeinfo.class);
   String id = UUIDUtil.createUUID();
   optnodeinfo.setId(id);
   optnodeinfos.add(optnodeinfo);
    }
   optnodeinfoService.insertBatch(optnodeinfos);
   bool=true;
 
  }
    return bool;
}
 
  public List<Object> getParseExcelObject(Class c,HttpServletRequest request){
  List<Object> data =null;
  InputStream inputstream =null;
  ServletFileUpload upload = new ServletFileUpload();
try {
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
FileItemStream fileItemStream = iter.next();
inputstream = fileItemStream.openStream();
data = EasyExcelFactory.read(inputstream, new Sheet(1, 1, c));
}
} catch (FileUploadException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
  finally {
try {
inputstream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
 
return data;
  }
 
}



分享到:
评论

相关推荐

    springboot整合easyexcel实现excel文件上传解析,下载导出简单实例.zip

    best20182022-10-17 14:55:20原证springboot整合easyexcel实现excel文件上传解析,下载导出简单实例 项目描述 springboot整合easyexcel,上传解析Excel,下载导出Excel 运行环境 jdk8+tomcat9+IntelliJ IDEA+...

    easyExcel导出文件的模版

    easyExcel导出文件的模版

    如何使用EasyExcel库来写入Excel文件

    通过以上示例代码,你应该能够理解如何使用EasyExcel库在Java中进行Excel文件的写入操作。这个库提供了简洁的API,使得Excel文件的操作变得非常方便。 总结一下,实现Excel文件写入的步骤包括: 1.引入EasyExcel的...

    EasyExcel 并发读取文件字段并进行校验,数据写入到新文件,批量插入数据到数据库

    下面我们将详细探讨如何使用EasyExcel实现并发读取文件字段、进行数据校验、将数据写入新文件以及批量插入到数据库的操作。 1. **EasyExcel介绍** EasyExcel是一款轻量级的Java Excel处理框架,它基于NIO和内存...

    easyExcel实现大数据导出

    下面将详细阐述`easyExcel`的核心功能、使用方法以及如何实现大数据导出。 `easyExcel`的核心特性: 1. **内存优化**:`easyExcel`通过分片读写数据,避免一次性加载大量数据到内存中,从而减少内存占用。 2. **...

    SpringBoot分片上传Excel大文件,支持断点续传,EasyExcel处理百万级数据

    前端Excel大文件file slice分片,md5校验文件完整性并作文件标识记录写入数据库,支持断点...文件上传完毕后,使用EasyExcel读取文件流,处理Excel数据写入数据库中,可处理百万级数据。项目完整,连接数据库即可运行。

    集成easyexcel实现excel表格增强.zip

    例如,可以创建一个`importService`,提供`importExcel`方法接收上传的Excel文件,然后通过EasyExcel的`read`方法读取数据,将数据转换为业务对象,最后保存到数据库。同时,也可以创建一个`exportService`,根据...

    easyexcel+validation excel导入导出下载

    2. **编写监听器**:EasyExcel提供了监听器接口,通过实现这些接口,我们可以定制数据读取或写入时的行为,如数据转换、异常处理等。 3. **读取Excel**:调用EasyExcel.read()方法,传入文件路径和自定义的监听器,...

    EasyExcel使用的相关的jar包

    3. **写入Excel**:使用`EasyExcel.write()`方法,传入目标文件路径和一个可选的`WriteSheet`实例,`WriteSheet`用于设置写入的表格属性。例如: ```java EasyExcel.write("path_to_output_excel_file", ...

    EasyExcel导出.txt

    EasyExcel 导出,含动态表头导出

    阿里EasyExcel导出案例

    阿里EasyExcel是一款由阿里巴巴开发的轻量级Java库,专门用于处理Excel文件,尤其是数据的导入和导出。它的设计目标是低内存消耗、高效性能和简单易用。在这个"阿里EasyExcel导出案例"中,我们将深入探讨如何利用...

    关于Java使用EasyExcel导出动态数据为Excel文件SpringBoot代码项目示例

    2、项目使用SpringBoot,Ali3.0.5版本的easyexcel框架。 3、资源内有具体的使用说明和易碰到的问题及解决方案,有博主个人联系方式,欢迎来交流。 使用说明: 1、下载资源后请先看readme文档,README.md中有项目的...

    通过EasyExcel+线程池实现百万级数据从Excel导入到数据库

    在处理大量数据导入数据库的场景中,使用阿里巴巴开源的EasyExcel库结合线程池技术可以有效地实现从Excel文件导入到数据库的过程。先定义sheet的数量和固定大小的线程池数量,每个sheet页做为单独的任务交给线程池...

    hutool、esayPoi、easyExcel、性能对比

    导出大文件的时候可能会有临时存储, 我的是在C:\Users\xbx\AppData\Local\Temp\poifiles 读csv文件 行数:1048575 hutool: 5205 esayPoi: 3929 easyExcel1: 1917 easyExcel2: 2832 读excel文件 行数:1048575...

    使用EasyExcel进行Excel文档导入导出详细教程:EasyExceleasyexcel.rar

    导入Excel文件时,使用EasyExcel的`read`方法: ```java public void importExcel(String filePath) { EasyExcel.read(filePath, Student.class, new StudentListener()).sheet().doRead(); } ``` 导出Excel文件...

    easyExcel千万级别数据下载

    在使用`EasyExcel`进行大数据文件下载时,我们首先需要了解其基本使用流程: 1. **创建Excel模板**:定义Excel的列名和数据类型,可以通过注解或XML配置来实现。 2. **编写实体类**:根据模板创建对应的Java实体类...

    阿里的EasyExcel+Mysql方式实现数据库数据导出生成excel,将excle表里面的数据保存到数据库.zip

    3. **使用EasyExcel写入数据**:调用EasyExcel.write方法,传入文件路径和映射的Java对象,然后遍历数据集,将每条数据写入到对应的Excel行中。 接下来,我们将讨论如何将Excel表中的数据保存到数据库。这个过程...

    easyexcel-2.1.4.zip

    《阿里EasyExcel 2.1.4:便捷的Excel处理框架》 EasyExcel是阿里巴巴开源的一款强大且易用的Java库,专为处理Excel数据而设计。在版本2.1.4中,它提供了一整套全面的JAR包,支持用户在不依赖具体Model实体类的情况...

    easyExcel的相关jar包.rar

    最后,使用`EasyExcel.read()`方法读取Excel文件,传入文件路径和监听器即可。 4. **数据读取** EasyExcel提供了两种读取方式:同步读和异步读。同步读适合数据量较小的情况,而异步读则适用于大数据量,通过...

    easyExcel.zip

    - **写入Excel**:使用`EasyExcel.write()`方法指定文件路径,配合`Sheet`和`Head`设置,即可写入数据。 - **注解映射**:通过在Java对象上添加`@ExcelProperty`注解,将Excel列与对象属性关联。 5. **高级功能**...

Global site tag (gtag.js) - Google Analytics