spingmvc 上传文件, poi解析xls,xlsx

前台jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>数据导入</title>
 	<style type="text/css">
	</style>
</head>
<body>
<div align="right">
	<form action="<%=request.getContextPath()%>/loanData" method="POST" enctype="multipart/form-data">
		<table class="table" id="queryCondition">
			<tbody  class="tbd">
			<tr>
				<td align="right" style="padding-right: 2px">
					<input type="file" name="myfiles" id="myfiles" style="display: none;" onchange="document.getElementById('filePath').value=this.value" />
					<div class="input-group">
						<input type='text' name='filePath' id='filePath' class='form-control'/>
						<span class="input-group-btn">
							<button type="button" class="btn btn-sm btn-info blue" id="btn_check">
								<i class="icon-edit">请选择文件</i>
							</button>
						</span>
					</div>
				</td>
				<td align="left" style="padding-left: 2px">
					<button type="submit" class="btn btn-sm btn-info" id="upload">
						<i class="upload-icon icon-cloud-upload bigger-110">导入</i>
					</button>
				</td>
			</tr>
			</tbody>
		</table>
	</form>
</div>
<script type="text/javascript">
	$(function() {
		$("#btn_check").click(function() {
			$("#myfiles").trigger('click');
		});
		$("#filePath").click(function() {
			$("#myfiles").trigger('click');
		});
	});
</script>
</body>
</html>

java代码,使用的包为poi3.5,commons-io2.1

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.FileUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class HdImporController {

	@RequestMapping("/initLoanData")
	public String initLoanData(HttpServletRequest request) {

		return "views/service/import/loanData";
	}

	@RequestMapping(value = "/loanData", method = RequestMethod.POST)
	public String loanData(@RequestParam MultipartFile[] myfiles,
			HttpServletRequest request) throws IOException {
		// 如果只是上传一个文件,则只需要MultipartFile类型接收文件即可,而且无需显式指定@RequestParam注解
		// 如果想上传多个文件,那么这里就要用MultipartFile[]类型来接收文件,并且还要指定@RequestParam注解
		// 并且上传多个文件时,前台表单中的所有<input
		// type="file"/>的name都应该是myfiles,否则参数里的myfiles无法获取到所有上传的文件
		File[] files = new File[myfiles.length];
		for (MultipartFile myfile : myfiles) {
			if (myfile.isEmpty()) {
				System.out.println("文件未上传");
			} else {
				System.out.println("文件长度: " + myfile.getSize());
				System.out.println("文件类型: " + myfile.getContentType());
				System.out.println("文件名称: " + myfile.getName());
				System.out.println("文件原名: " + myfile.getOriginalFilename());
				System.out.println("========================================");
				// 如果用的是Tomcat服务器,则文件会上传到\\%TOMCAT_HOME%\\webapps\\YourWebProject\\WEB-INF\\upload\\文件夹中
				String realPath = request.getSession().getServletContext().getRealPath("/files/upload/loanData");
				// 这里不必处理IO流关闭的问题,因为FileUtils.copyInputStreamToFile()方法内部会自动把用到的IO流关掉,我是看它的源码才知道的
				File file = new File(realPath, myfile.getOriginalFilename());
				FileUtils.copyInputStreamToFile(myfile.getInputStream(), file);
				if(myfile.getOriginalFilename().toLowerCase().endsWith("xls")){
					readXls(myfile.getInputStream());
				}else{
					readXlsx(file+"");
				}
			}
		}

		return "views/service/import/loanData";
	}

	private void readXlsx(String fileName) throws IOException {
		//String fileName = "D:\\excel\\xlsx_test.xlsx";
		XSSFWorkbook xssfWorkbook = new XSSFWorkbook(fileName);

		// 循环工作表Sheet
		for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
			XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet);
			if (xssfSheet == null) {
				continue;
			}

			// 循环行Row
			for (int rowNum = 0; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
				XSSFRow xssfRow = xssfSheet.getRow(rowNum);
				if (xssfRow == null) {
					continue;
				}

				// 循环列Cell
				for (int cellNum = 0; cellNum <= xssfRow.getLastCellNum(); cellNum++) {
					XSSFCell xssfCell = xssfRow.getCell(cellNum);
					if (xssfCell == null) {
						continue;
					}
					System.out.print("   " + getValue(xssfCell));
				}
				System.out.println();
			}
		}
	}

	@SuppressWarnings("static-access")
	private String getValue(XSSFCell xssfCell) {
		if (xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN) {
			return String.valueOf(xssfCell.getBooleanCellValue());
		} else if (xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC) {
			return String.valueOf(xssfCell.getNumericCellValue());
		} else {
			return String.valueOf(xssfCell.getStringCellValue());
		}
	}

	private void readXls(InputStream is) throws IOException {
		HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

		// 循环工作表Sheet
		for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
			HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
			if (hssfSheet == null) {
				continue;
			}

			// 循环行Row
			for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
				HSSFRow hssfRow = hssfSheet.getRow(rowNum);
				if (hssfRow == null) {
					continue;
				}

				// 循环列Cell
				for (int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum++) {
					HSSFCell hssfCell = hssfRow.getCell(cellNum);
					if (hssfCell == null) {
						continue;
					}

					System.out.print("    " + getValue(hssfCell));
				}
				System.out.println();
			}
		}
	}

	@SuppressWarnings("static-access")
	private String getValue(HSSFCell hssfCell) {
		if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
			return String.valueOf(hssfCell.getBooleanCellValue());
		} else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
			return String.valueOf(hssfCell.getNumericCellValue());
		} else {
			return String.valueOf(hssfCell.getStringCellValue());
		}
	}
}

时间: 2024-08-30 08:53:14

spingmvc 上传文件, poi解析xls,xlsx的相关文章

结合项目(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 ty

js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId = 'jUploadFrame' + id; if(window.ActiveXObject) { var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '&qu

springMVC:为MultipartFilte配置了上传文件解析器,报错或不能使用

一.问题描述为支持restful风格请求,并且应对可能上传文件的情况,需要在配置hiddenHttpMethodFilter过滤器之前配置MultipartFilter.目的是让MultipartFilter过滤器先将带文件上传的请求,进行解析.以便hiddenHttpMethodFilter可以取到”_method”参数,转化为相应的http动作. 既然multipartFilter要进行上传文件的解析,那么必然需要MutipartResolver,那么问题发生了! 二.报错:Unable t

springmvc+ajaxFileUpload上传文件(前后台彻底分离的情况下)

首先是导入jar包: web.xml: 1 <servlet> 2 <servlet-name>mvc-dispatcher</servlet-name> 3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 4 <init-param> 5 <param-name>contextConfigLocation&l

一个用于上传文件的servlet

1.jsp页面操作文件: 1 <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%> 2 <html> 3 <head> 4 <title>上传文件 </title> 5 <link rel="stylesheet" type="text/css" href=

使用FormData进行Ajax请求上传文件到controller层的实现

需求背景: 页面上传一个文件到controller层,然后后台对文件进行处理.文件类型不限. 第一种:单纯的上传文件 页面功能展现: 第一步:首先需要两个jar commons-fileupload-1.3.2.jarcommons-io-2.4.jar 版本不限: pom文件中相应两个jar: [html] view plain copy print? <dependency> <groupId>commons-io</groupId> <artifactId&

使用ocupload和POI一键上传Excel并解析导入数据库

使用的工具如下:  JQuery ocupload jquery.ocupload-1.1.2.js Apache POI  poi-3.9.jar 如果是Maven项目添加依赖如下: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> J

文件上传漏洞及解析漏洞总结

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力.这种攻击方式是最为直接和有效的,"文件上传"本身没有问题,有问题的是文件上传后,服务器怎么处理.解释文件.如果服务器的处理逻辑做的不够安全,则会导致严重的后果. 文件上传后导致的常见安全问题一般有: 1)上传文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行. 2)上传文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为(

关于在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程

第一步:登录阿里云官网,获取服务器ECS的指定公网IP地址. 1.输入阿里云官网账号进入首页,如下图: 2.点击进入"管理控制台",如下图: 3.点击"云服务器ECS",进入你购买的服务器概览界面,如下图: 4.点击左侧"实例"选项,进入你名下服务器信息界面,如下图:注意你购买服务器所在地. 获取服务器公网地址. 第二步:登录你所购买域名的供应商进行解析域名绑定服务器IP地址:如(万网)(现万网与阿里云整合在一起,所以你再阿里云也可以解析域名到你