Java-POI导入Excel文件上传

开发工具与关键技术:Java/MyEclipse 10
作者:张俊辉
撰写时间:2019年07月08日

本文使用两个jar包,分别是:commons-fileupload-1.3.2.jar、与commons-io-2.5.jar
前端使用Layui上传文件并调用servlet方法InputtingExcelPreview,也可以自行写入方法上传文件并调用方法InputtingExcelPreview
使用Layui需要设置的参数有:auto:true选完文件自动上传、accept:‘file’ 上传文件类型设置为所有文件、exts:‘xls|xlsx’、限制文件后缀名为.xls或.xlsx,请求成功后弹出后台请求状态并判断当解析后的Excel表格数据符合条件的大于0弹出预览数据模态框、点击确定导入调用后台方法InputtingExcel保存入数据库。
InputtingExcelPreview方法的书写方式与主要作用:该方法主要是保存文件并把文件传递到的SupplierService类中的InputtingExcelPreview方法,解析数据后写入到ReturnListJson类中返回到页面。
首先需要将上传的文件保存到临时文件夹,这里需要引入commons-fileupload-1.3.2.jar、与commons-io-2.5.jar
然后需要实例化一个DiskFileItemFactor类,然后通过该实例设置内存临界值并配置临时目录代码如下:

int sizeThreshold=1024*1024*10; //10MB
DiskFileItemFactory factory=new DiskFileItemFactory();
// 设置内存临界值 - 超过后将产生临时文件并存储于临时目录中 10M
factory.setSizeThreshold(sizeThreshold); 
//配置临时目录
factory.setRepository(new File(System.getProperty("java.io.tmpdir")));

然后实例化ServletFileUpload类设置文件上传最大值、编码、请求的最大值,代码如下:

int fileSizeMax=1024*1024*100;	//100M
int sizeMax=1024*1024*300; //300M
ServletFileUpload upload=new ServletFileUpload(factory);
//设置编码upload.setHeaderEncoding("utf-8");
//设置上传文件的最大大小upload.setFileSizeMax(fileSizeMax);
//设置请求的最大大小upload.setSizeMax(sizeMax);

接下来需要构造临时路径来存储上传的文件,代码如下:

// 构造临时路径来存储上传的文件,这个路径相对当前应用的目录
String uploadPath=request.getServletContext().getRealPath("./")+File.separator+"upload";
// 如果目录不存在则创建
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
     uploadDir.mkdir();
}

获取上传的文件序列循环遍历后逐一保存到磁盘,并调用supplierService中的InputtingExcelPreview并传入文件,把返回数据中的data保存到Session中并把返回的数据发送到前端页面 :

List<FileItem> formItems = upload.parseRequest(request);
for (FileItem item : formItems) {
	//isFormField 表单元素
	if (!item.isFormField()) {
		String fileName =System.currentTimeMillis()+"__"+ new File(item.getName()).getName();
        String filePath = uploadPath + File.separator + fileName;
         File file = new File(filePath);
        // 保存文件到硬盘
        item.write(file);
        if("supplierLinkmam".equals(inputtingType)){   
			 ISupplierService supplierService =new SupplierServiceImpl(); 	     ReturnListJson<SelectSupplierVo>listJson=supplierService.InputtingExcelPreview(file);
             if(listJson.getData().size()>0){
                	request.getSession().removeAttribute("listData");
                 request.getSession().setAttribute("listData", listJson.getData());
             }
			jsonObj=JSONObject.fromObject(listJson);
			PrintWriter out=response.getWriter();
			out.write(jsonObj.toString());
			out.flush();
			out.close();
		}
}

返回格式为封装的ReturnListJson类如下,其中code储存的是返回的状态,最好可以和Layui的弹框图标对应常用的有(0代表警告,1代表成功,2代表失败,3代表询问)msg储存的是提示的内容count代表的是总条数(在分页时需要用到这里可以赋值为0),data储存的是解析后符合条件的数据的数据:

public class ReturnListJson<T> {
	private int code;
	private String msg;
	private int count;
	private List<T> data;
	public int getCount() {
		return count;
	}
	public void setCount(int count) {
		this.count = count;
	}
	public int getCode() {
		return code;
	}
	public void setCode(int code) {
		this.code = code;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public List<T> getData() {
		return data;
	}
	public void setData(List<T> data) {
		this.data = data;
	}
	public ReturnListJson(int code,String msg,int count,List<T> data){
		this.code=code;
		this.data=data;
		this.msg=msg;
		this.count=count;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值