jsp使用webuploader上传excelmysql导入导出apache-poi(代码片段)

霜序0.2℃ 霜序0.2℃     2023-02-05     409

关键词:

jsp使用webuploader上传excel mysql导入导出 apache-poi

关键词:jsp,webuploader,excel上传导入导出,mysql

目标

  • 让excel上传到服务器并让插入数据到数据库
  • 如果需要下载则将数据库中的数据导出成excel并成功让用户下载

效果

大致思路

前端实现:layui,webuploader,jsp
后端实现:apache.poi,mysql,servlet,fastjson,commons-io
日志组件:slf4j,log4j

前端使用layui来实现,用webuploader作上传组件上传excel,用apache-poi操作excel导入和导出,编写了一个工具类ExcelUtil

最开始从add.jsp开始,需要上传就到uploadservlet中,操作是将excel传到服务器并且存入数据库中(我加了一个id字段)

list.jsp即查看数据库中有多少个excel表格,数据是从data.jsp中传入的

如果需要下载则通过downloadservlet生成excel并下载

现在的我后知后觉,应该把那些顶部的abcde…设成字段,傻了傻了

代码

util

excelUtil

excel工具类

package top.sehnsucht.utils;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import top.sehnsucht.dao.ExcelDao;
import top.sehnsucht.dao.impl.ExcelDaoImpl;
import top.sehnsucht.service.ExcelService;
import top.sehnsucht.service.impl.ExcelServiceImpl;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;

/**
 * @Description: excel工具类
 * @Author: Cai
 * @CreateTime: 2021/11/19
 */

public class ExcelUtil 
    /**
     * 将name文件从数据库中读取出来
     * @throws IOException
     */
    public static void createExcelFile(String name, String path) throws Exception 
        ExcelDao dao = new ExcelDaoImpl();
        ArrayList<ArrayList<String>> allList = dao.dataToExcel(name);

        File excelFile = new File(path);
        if (!excelFile.exists()) 
            excelFile.mkdirs();
        

        Workbook wb = new HSSFWorkbook();
        Sheet sheet = wb.createSheet();
        CellStyle cellStyle = wb.createCellStyle();
        // 字体
        Font font = wb.createFont();
        font.setFontName("等线");
        font.setFontHeightInPoints((short) 20);
        cellStyle.setFont(font);
        for (int i = 0; i < allList.size(); i++) 
            // 3、创建行对象
            Row row = sheet.createRow(i);
            for (int j = 0; j < allList.get(i).size(); j++) 
                Cell cell = row.createCell(j);
                cell.setCellValue(allList.get(i).get(j));
                cell.setCellStyle(cellStyle);
            
        

        OutputStream os = new FileOutputStream(path + "\\\\" + name + ".xls");
        wb.write(os);
        os.close();
    

    /**
     * 将filePath的文件存入数据库
     * @param name
     * @param filePath
     * @throws IOException
     */
    public static void readExcelFile(String name, String filePath) throws IOException 
        ExcelDao dao = new ExcelDaoImpl();
        ExcelService service = new ExcelServiceImpl(dao);

        File xlsFile = new File(filePath);

        // 工作表
        Workbook workbook = WorkbookFactory.create(xlsFile);
        // 表个数。
        int numberOfSheets = workbook.getNumberOfSheets();
        // 遍历表。
        for (int i = 0; i < numberOfSheets; i++) 
            Sheet sheet = workbook.getSheetAt(i);

            // 行数。
            int rowNumbers = sheet.getLastRowNum() + 1;

            // Excel第一行。
            Row temp = sheet.getRow(0);
            if (temp == null) 
                continue;
            

            int cells = temp.getPhysicalNumberOfCells();

            ArrayList<String> list = new ArrayList<String>();
            // 读数据。
            for (int row = 0; row < rowNumbers; row++) 
                if (row == 0) 
                    Row r = sheet.getRow(row);
                    for (int col = 0; col < cells; col++) 
                        if (r.getCell(col) == null) 
                            list.add("null");
                         else 
                            list.add(r.getCell(col).toString());
                        
                    
                    System.out.println(list);
                    service.createExcel(name,list);
                    continue;
                
                ArrayList<String> data = new ArrayList<String>();
                Row r = sheet.getRow(row);
                for (int col = 0; col < cells; col++) 
                    if (r.getCell(col) == null) 
                        data.add("null");
                     else 
                        data.add(r.getCell(col).toString());
                    
                
                service.addExcel(name,list,data);
            
        
    


DBUtil

package top.sehnsucht.utils;

import lombok.extern.slf4j.Slf4j;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.log4j.Logger;

/**
 * @Description:
 * @Author: Cai
 * @CreateTime: 2021/10/29
 */
@Slf4j
public class DBUtil 
    // 定义数据库连接参数
    public static final String DRIVER_CLASS_NAME = "com.mysql.cj.jdbc.Driver";
    public static final String URL = "jdbc:mysql://localhost:3306/excel";
    public static final String USERNAME = "root";
    public static final String PASSWORD = "818181";


    // 注册数据库驱动
    static 
        try 
            Class.forName(DRIVER_CLASS_NAME);
         catch (ClassNotFoundException e) 
            e.printStackTrace();
        
    

    // 获取连接
    public static Connection getConn() throws SQLException 
        return DriverManager.getConnection(URL, USERNAME, PASSWORD);
    

    // 关闭连接
    public static void closeConn(Connection conn) 
        if (null != conn) 
            try 
                conn.close();
             catch (SQLException e) 
                System.out.println("关闭连接失败!");
                e.printStackTrace();
            
        
    

    //测试
    public static void main(String[] args) throws SQLException 
        System.out.println(DBUtil.getConn());
    

servlet

DownloadServlet

package top.sehnsucht;

import org.apache.log4j.Logger;
import top.sehnsucht.dao.ExcelDao;
import top.sehnsucht.dao.impl.ExcelDaoImpl;
import top.sehnsucht.service.ExcelService;
import top.sehnsucht.service.impl.ExcelServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Description:
 * @Author: Cai
 * @CreateTime: 2021/11/20
 */

public class DownloadServlet extends HttpServlet 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        Logger logger = Logger.getLogger(this.getClass());
        String path = req.getSession().getServletContext().getRealPath("/") + "\\\\excel";
        String name = req.getParameter("name");
        logger.info(path);
        logger.info(name);
        ExcelDao dao = new ExcelDaoImpl();
        ExcelService service = new ExcelServiceImpl(dao);
        service.DataToExcel(name,path);


        resp.setContentType("application/vnd.ms-excel");
        req.getRequestDispatcher("/excel/" + name + ".xls").forward(req,resp);

        req.getRequestDispatcher("/list").forward(req,resp);
    

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        doGet(req, resp);
    


JDBCServlet

package top.sehnsucht;

import org.apache.log4j.Logger;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;


public class JDBCServlet extends HttpServlet 
    private Logger logger = Logger.getLogger(this.getClass());

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        String strBackUrl = "http://" + req.getServerName() + ":" + req.getServerPort() + "/list.jsp";
        resp.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
        resp.setHeader("Location", strBackUrl);
    

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException 
        doGet(req, resp);
    


Log4jServlet

package top.sehnsucht;

import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.PropertyConfigurator;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import java.io.File;


/**
 * @Description:
 * @Author: Cai
 * @CreateTime: 2021/11/12
 */

public class Log4JInitServlet extends HttpServlet 

    @Override
    public void init(ServletConfig config) throws ServletException 
        System.out.println("Log4JInitServlet 正在初始化 log4j日志设置信息");
        String log4jLocation = config.getInitParameter("log4j-properties-location");

        ServletContext sc = config.getServletContext();

        String str= sc.getInitParameter("test");
        System.out.println("str:"+str);

        if (log4jLocation == null) 
            System.err.println("*** 没有 log4j-properties-location 初始化的文件, 所以使用 BasicConfigurator初始化");
            BasicConfigurator.configure();
         else 
            String webAppPath = sc.getRealPath("/");
            String log4jProp = webAppPath + log4jLocation;
            File yoMamaYesThisSaysYoMama = new File(log4jProp);
            if (yoMamaYesThisSaysYoMama.exists()) 
                System.out.println("使用: " + log4jProp+"初始化日志设置信息");
                PropertyConfigurator.configure(log4jProp);
             else 
                System.err.println("*** " + log4jProp + " 文件没有找到, 所以使用 BasicConfigurator初始化");
                BasicConfigurator.configure();
            
        
        super.init(config);
    


uploadServlet

package top.sehnsucht;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import top.sehnsucht.utils.ExcelUtil;

importjsp利用webuploader实现超大文件分片上传断点续传

​需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。第一步:前端修改由于项目使用的是BJUI前端框架,并... 查看详情

使用webuploader和servlet实现文件上传

...POST请求封装成Part,通过Part对上传的文件进行操作。3、WebUploader参照网上教程实现。4、引入webuploader.css、webuploader.js、Uploader.swfupload.jsp: < 查看详情

webuploader文件图片上传插件的使用(代码片段)

最近在项目中用到了百度的文件图片上传插件WebUploader。分享给大家需要在http://fex.baidu.com/webuploader/download.html点击打开链接下载WebUploader//初始化WebUploader***上传图片 varuploader=WebUploader.create( //选完文件后,是否自动上传。 ... 查看详情

vue移动端图片上传,可最多上传9张,使用webuploader插件

参考技术A图片上传WebUploader.js 查看详情

使用webuploader插件上传图片时如果正确限制上传数量

参考技术Aphp.ini:upload_max_filesize所上传的文件的最大大小。默认值2M。 查看详情

大文件上传组件webupload插件

​需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。第一步:前端修改由于项目使用的是BJUI前端框架,并... 查看详情

如何让webuploader上传之前进行验证

参考技术Awebuploader如何上传使用java方法/步骤1使用webuploader页面如下2点击上传按钮,或者复制粘贴或者拖拉图片导下面区域里都可以上传图片3点击上传,java代码如下。servlet里的dopost方法4点击上传后,图片会存入你写入的文件... 查看详情

jfinal+webuploader实现图片的异步上传(代码片段)

关于WebUploader##WebUploader是由BaiduWebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。界面友好,使用方便,稍作修改,可快速上手。官网:http://fex.baidu.com/webuploader/如何使用webuploader到官... 查看详情

使用webuploader插件上传图片时如果正确限制上传数量

//初始化WebUploader uploader=WebUploader.create( //自动上传。 auto:true, //swf文件路径 swf:'__PUBLIC__/Home/swf/Uploader.swf', //文件接收服务端。 server:'#:U('Feedback/uploadimg')#', //选择文件的按钮。可选。 //内部根据当前运行是... 查看详情

使用webuploader实现图片上传(代码片段)

...inkrel="stylesheet"type="text/css"href="js/webuploader-0.1.5/webuploader.css"><scripttype="text/javascript"src="js/jquery.min.js"></script><scripttype="text/javascript"src="js/webuploader-0.1.5/webuploa... 查看详情

用webuploader怎么解决跨域上传文件的问题

参考技术A最近研究了下大文件上传的方法,找到了webuploaderjs插件进行大文件上传,大家也可以参考这篇文章进行学习:《WebUploader文件上传插件使用详解》使用使用webuploader分成简单直选要引入<!--引入CSS--><linkrel="style... 查看详情

webuploader怎么只能上传一个文件

使用webuploader点击传按钮或者复制粘贴或者拖拉图片导面区域都传图片点击传java代码servletdopost点击传图片存入写入文件夹需要注意需要修改js文件请求台路径前段代码需要源码复参考技术Apick下的属性multipleBoolean是否开起同时选... 查看详情

java使用webuploader做大文件的分块和断点续传

​需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制。第一步:前端修改由于项目使用的是BJUI前端框架,并... 查看详情

asp.netmvc之图片上传,webuploader多实例上传疑问,在这里轻松解决!(代码片段)

...,在处理图片上传功能上遇到了一道坎。之前是使用webuploader插件实现图片上传,但在处理多实例问题时,一直难以跨过。几经思索,再次踏上了学习之路。疑难问题1.在之前使用webuploader时,在处理多图上传问题上... 查看详情

webuploader.js上传的几种情况

最近的项目中用到webUploader的地方比较多,总结了几种图片上传的情况。必要的引用<linkhref="~/Scripts/webuploader-0.1.5/webuploader.css"rel="stylesheet"/><scriptsrc="~/Scripts/webuploader-0.1.5/webuploader.min.js"></script 查看详情

webuploader上传错误怎么捕捉

...:uploader.on('error',function(handler)alert(handle););刚使用webuploader,也是调试了好久。 参考技术B捕获文件上传中的错误代码如下:代码.javascript-webUploader上传文 查看详情

webuploader分片上传的实现代码(前后端分离)

参考技术A本文介绍了webuploader分片上传的实现代码(前后端分离),分享给大家,具体如下:WebUploader是由BaiduWebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势... 查看详情

上传控件webuploader判断有没有上传成功

参考技术A或将照片拖到这里,单次最多可选30张0%开始上传 查看详情