结合项目(Spring+(基于注解的)SpringMVC和Mybatis+uploadify文件上传)--poi解析Excel文件

poi解析Excel文件

1.上传文件至服务器

2.解析Excel文件并返回数据集合

3.将数据保存到服务器

框架======Spring+(基于注解的)SpringMVC和Mybatis=====

第一步:

前台:

jsp文件采用的是uploadify

<div id="fileQueue"></div>
<input type="file" id="brandFile">

js:

<script type="text/javascript">
    //当DOM(文档对象模型)载入就绪可以查询及操纵时绑定一个要执行的函数。
    $(document).ready(function(){
         $("#brandFile").uploadify({
           //前台请求后台的url 不可忽略的参数              获取session的id
             'uploader':'<%=request.getContextPath()%>/brand/analyzeXml.jhtml;',
              //插件自带  不可忽略的参数
              'swf': '<%=request.getContextPath()%>/js/uploadify/uploadify.swf',
          //撤销按钮的图片路径
            'cancelImg': '<%=request.getContextPath() %>/js/uploadify/uploadify-cancel.png',
              //如果为true 为自动上传  在文件后 为false 那么它就要我们自己手动点上传按钮
            'auto': true,
            //可以同时选择多个文件 默认为true  不可忽略
            'multi': false,
            //设置上传队列容器DOM元素的ID,如果为false则自动生成一个队列容器。
            //'queueID': false,
            'queueID': 'fileQueue',
           // fileTypeDesc: '*.xls;*.xlsx',//文件后缀描述
            //fileTypeExts: '**.xls;*.xlsx',//文件后缀限制
            //给上传按钮设置文字
            'buttonText': 'poi解析',
            //上传后队列是否消失
            'removeCompleted': true,
            //上传完成后每个文件消失的间隔
            'removeTimeout' : 1,
            /*上传文件的大小限制允许上传文件的最大 大小。 这个值可以是一个数字或字 符串。
                    如果它是一个字符串,它接受一个单位(B, KB, MB, or GB)。
                    默认单位为KB您可以将此值设置为0 ,没有限制,
                    单个文件不允许超过所设置的值 如果超过 onSelectError时间被触发*/
            'fileSizeLimit':'100KB',

            //上传对象的名字 相当file标签中的name属性;
            'fileObjName' : 'brandFile',
            //上传文件的个数
            'uploadLimit':  1,
            //返回一个错误,选择文件的时候触发
            'onSelectError':function(file, errorCode, errorMsg){
                switch(errorCode) {
                    case -100:
                        alert("上传的文件数量已经超出系统限制的"
                         +$('#brandFile').uploadify('settings','queueSizeLimit')+"个文件!");
                        break;

                    case -110:
                        alert("文件 ["+file.name+"] 大小超出系统限制的"
                         +$('#brandFile').uploadify('settings','fileSizeLimit')+"大小!");
                        break;

                    case -120:
                        alert("文件 ["+file.name+"] 大小异常!");
                        break;

                    case -130:
                        alert("文件 ["+file.name+"] 类型不正确!");
                        break;
                }
            },

                //上传到服务器,服务器返回相应信息到data里
                'onUploadSuccess':function(file, data, response){
                    alert("上传成功");
                    alert(data);
                },

              //当单个文件上传出错时触发
                'onUploadError': function (file, errorCode, errorMsg, errorString) {
                    alert("上传失败");
                    }
                });
            });

</script> 

后台:

myBatis结合uploadify的文件上传

@RequestMapping("/analyzeXml")
    public void analyzeXml(@RequestParam MultipartFile brandFile,HttpServletRequest request,HttpServletResponse response) {
        //上传xml文件
        InputStream inputs;
        try {
            inputs = brandFile.getInputStream();
            String fileName = brandFile.getOriginalFilename();
            String path = getRealPath("/uploadFile", request);
            System.out.println(path);
            String uploadFileName = FileUtil.uploadFile(inputs, fileName, path);
            //解析xml文件
            List<Brand> brandList = AnalyzePoiBrand.Analyze_Poi_Brand(getRealPath("/uploadFile/"+uploadFileName, request));
            //导入数据库
            brandService.addBrandListPoi(brandList);
            //响应客户端
            outJoin("{\"success\":true}", response);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

获取上传文件名:FileUtil封装类中的uploadFile()方法

/***
	 * <pre>uploadFile(springMVC文件上传  传inputStream)
	 * 修改备注:
	 * @param inputs
	 * @param fileName
	 * @param folderPath
	 * @return</pre>
	 */
	public static String uploadFile(InputStream inputs, String fileName, String folderPath) {
		// 上传物理文件到服务器硬盘
		BufferedInputStream bis = null;
		FileOutputStream fos = null;
		BufferedOutputStream bos = null;
		String uploadFileName = null;
		try {
			// 构建输入缓冲区,提高读取文件的速度
			bis = new BufferedInputStream(inputs);
			// 自动建立文件夹
			File folder = new File(folderPath);
			if (!folder.exists()) {
				folder.mkdirs();
			}
			// 为了保证上传文件的唯一性,可以通过uuid来解决
			// 为了避免中文乱码问题则新生成的文件名由uuid+原来文件名的后缀组成
			uploadFileName = UUID.randomUUID().toString()+getSuffix(fileName);
			// 构建写文件的流即输出流
			fos = new FileOutputStream(new File(folderPath+"/"+uploadFileName));
			// 构建输出缓冲区,提高写文件的性能
			bos = new BufferedOutputStream(fos);
			// 通过输入流读取数据并将数据通过输出流写到硬盘文件夹
			byte[] buffer = new byte[4096];// 构建4k的缓冲区
			int s = 0;
			while ((s=bis.read(buffer)) != -1) {
				bos.write(buffer, 0, s);
				bos.flush();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if (bos != null) {
				try {
					bos.close();
					bos = null;
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

			if (fos != null) {
				try {
					fos.close();
					fos = null;
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

			if (bis != null) {
				try {
					bis.close();
					bis = null;
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

			if (inputs != null) {
				try {
					inputs.close();
					inputs = null;
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}

		}
		return uploadFileName;
	}

原来的后缀名的获取getSuffix()

private static String getSuffix(String fileName) {
		int index = fileName.lastIndexOf(".");
		String suffix = fileName.substring(index);
		return suffix;
	}

封装的将Excel问键转换成JavaBeanList数据

public class AnalyzePoiBrand {

	public static List<Brand> Analyze_Poi_Brand(String brandPath) {
		List<Brand> brandModelList = new ArrayList<Brand>();
		try {
			//通过路径获取要解析的文件
			InputStream inputStream = new FileInputStream(brandPath);

				//将文件进行解析(把获取到的文件转换成sheet表)
				XSSFWorkbook workBook = new XSSFWorkbook(inputStream);
				//获取sheet从第零行开始
				XSSFSheet hssfSheet = workBook.getSheetAt(0);
				//获取总行数
				int lastRowNum = hssfSheet.getLastRowNum();
				//必须用《=因为从下表数。只用《那么会少数一条数据
				for (int i = 0; i <= lastRowNum; i++) {
					Brand brand = new Brand();
					XSSFRow hrow = hssfSheet.getRow(i);
					String brandName = hrow.getCell(0).getStringCellValue();
					brand.setBrandName(brandName);
					brandModelList.add(brand);
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		return brandModelList;
	}
}

以上是我再项目的使用

时间: 2024-08-02 02:41:07

结合项目(Spring+(基于注解的)SpringMVC和Mybatis+uploadify文件上传)--poi解析Excel文件的相关文章

SpringMVC 文件上传配置,多文件上传,使用的MultipartFile

一.配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> <beans:bean id="multipartResolver" class="org.springframework.web.multipart.com

SpringMVC 文件上传配置,多文件上传,使用的MultipartFile(转)

文件上传项目的源码下载地址:http://download.csdn.net/detail/swingpyzf/6979915   一.配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file [html] view plain copy print? <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> &

spring boot工程文件上传出现net::ERR_CONNECTION_ABORTED,文件上传失败

SpringBoot做文件上传时出现了The field file exceeds its maximum permitted size of 1048576 bytes.错误,显示文件的大小超出了允许的范围.查看了官方文档,原来Spring Boot工程嵌入的tomcat限制了请求的文件大小,这一点在Spring Boot的官方文档中有说明,原文如下 65.5 Handling Multipart File UploadsSpring Boot embraces the Servlet 3 j

springmvc - 文件上传 - 使用阿里oss文件

公司用到了 阿里的文件服务器 oss ,我们之前用的是springmvc的上传文件. 首先增加阿里的jar到我的maven项目. 复制下面的sample这些java类.. public class OSSObjectSample {  private static final String ACCESS_ID = "****";  private static final String ACCESS_KEY = "****";  private static fin

Spring基于注解及SpringMVC

1.使用注解 (1)组件扫描 指定一个包路径,Spring会自动扫描该包 及其子包所有组件类,当发现组件类定义前有 特定的注解标记时,就将该组件纳入到Spring 容器.等价于原有XML配置中的<bean>定义功能. 组件扫描可以替代大量XML配置的<bean>定义. (2)如何使用 step1,在配置文件当中,添加 <context:component-scan base-package=""/> 让容器扫描指定的包及其子包下面的类. step2,

SpringMVC单文件上传

最近在看SpringMVC的文件上传部分,其实大多数系统都要涉及到文件上传,以前对于Struts的文件上传功能也做过总结了,今天主要说明一下如何使用SpringMVC进行表单上的文件上传以及多个文件同时上传的步骤. 一.设置配置文件: SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file [html] view plaincopyprint? <!-- 配置MultipartResolver 用于文

Strut2 和Spring MVC 文件上传对比

在Java领域中,有两个常用的文件上传项目:一个是Apache组织Jakarta的Common-FileUpload组件 (http://commons.apache.org/proper/commons-fileupload/),另一个是Oreilly组织的COS框架的 (http://www.servlets.com/cos). 1.Struts2的文件上传 Struts2本身并没提供上传的组件,我们可以通过调用上传框架来实现文件的上传,struts2默认是jakarta作为其文件上传的解析

SpringMvc文件上传和下载

本篇博客将讲解的是Springmvc的文件上传和下载功能.对于上传功能,我们在项目中是经常会用到的,比如用户注册的时候,上传用户头像,这个时候就会使用到上传的功能.而对于下载,使用场景也很常见,比如我们项目中有个使用说明是是pdf版的,会提供给用户进行下载的功能.相对于来说,这两个功能都是很常见,废话不多说,按照惯例,我们先来看一下本篇博客的目录. 目录 一:搭建SpringMvc开发环境 二:实现文件上传的功能 三:将上传文件绑定到具体的对象上 四 : 实现用户下载的功能 五:总结 一:搭建S

文件上传(Servlet/Struts2/SpringMVC)

文件上传 Servlet实现 要实现文件上传的功能,必须在form的表单中的添加 enctype="multipart/form-data" 表示以二进制流的方式将文件传给控制器. 需要导入的jar包有:commons-fileupload-1.2.1.jar.commons-io-1.4.jar 文件上传的步骤: (1)创建DiskFileItemFactory的对象. (2)创建ServletFileUpload的对象,需传入DiskFileItemFactory的对象.可以获得封