`
Donald_Draper
  • 浏览: 972044 次
社区版块
存档分类
最新评论

ajaxFileUpload的使用

    博客分类:
  • HTML
阅读更多
artDialog官网:http://www.daimajiayuan.com/download/201304/yulan/artDialog4.1.7/
artDialog 配置参数:http://www.cnblogs.com/mfc-itblog/p/5648717.html
jQuery插件之ajaxFileUpload:http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html
页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
	<title></title>
	<!--引入弹窗组件start-->
	<!-- <script type="text/javascript" src="${base}/res/zDialog/zDrag.js"></script>
	<script type="text/javascript" src="${base}/res/zDialog/zDialog.js"></script> -->
	-->
	<link href="${base}/res/artDialog-5.0.4/skins/default.css" rel="stylesheet" type="text/css"/>
	<script src="${base}/res/artDialog-5.0.4/artDialog.min.js" type="text/javascript"></script>
	<script type="text/javascript" src="${base}/res/ajaxfileupload/ajaxfileupload.js"></script>
	<script type="text/javascript">
	//alert("${base}");
	var iDialog ;
         function importDialog(){
		var updateHtml = '<p id="importMessage" style="display:none;">正在导入信息...</p>'+
		 '<table id="updateTable">'+
			'<tr>'+
				'<td style="width:40px;text-align: right;">文件:</td>'+
				'<td><input type="file" id="execelFile" name="execelFile" onchange="fileType(this)"/></td>'+
			'</tr>'+
			'<tr>'+
				'<td style="text-align: center;" colspan="2">'+
				    '<input class="upload-file" type="button" value="上传" onclick="update()" style="height:20px;width:120px;margin-left:50px;"/>'+ 
				'</td>'+
			'</tr>'+
	  '</table>';
	  $("#content").html(updateHtml);
	   var htmlContent = $("#content").html();
	   iDialog = $("#importDialog").dialog({
			title:"信息导入",
			height: 150,
			width: 350,
			modal: true,
			content:htmlContent
		}); 
	   $("#content").css("display","table");
	}
	function fileType(obj){
		var fileType=obj.value.substr(obj.value.lastIndexOf(".")).toLowerCase();//获得文件后缀名
	    if(fileType != '.xls' ){
	    	alert("仅可上传Excel2003文件格式(.xls)");
	    	$("#execelFile").val('');
	    }
		var fileName = obj.value;
		$("#fileName").val(fileName);
	}
	
	function update(){
		if($("#execelFile").val()==""){
			alert("仅可上传Excel2003文件格式(.xls)");
	    	$("#execelFile").val('');
		}
		$("#updateTable").css("display","none");
		$("#importMessage").css("display","inline-block");
		$.ajaxFileUpload({
		    url : "importExcel.do",
		    secureuri : false,
		    fileElementId : 'execelFile',
		    dataType : 'text',
		    success : function(data) {
		    	$("#content").html(data);
		    	//alert(data);
		    	//iDialog.close();
		    },
		    error : function(data) {
		    	location.reload();
		    }
		});
	}
	</script>	
</head>
<body>
<div>
    <input class="query" type="button" value="导入" onclick="importDialog();" style="height:20px;width:120px;margin-left: 115px;"/> 
    [align=right;]文件:</td>
					<td><input type="text" id="fileName" name="fileName" /></td>
					<td><input type="file" id="execelFile" name="execelFile" onchange="fileType(this)"/></td>
				</tr>
				<tr>
					<td style="text-align: center;" colspan="2">
					    <input class="upload-file" type="button" value="上传" onclick="update()" style="height:20px;width:120px;margin-left:50px;"/> 
					</td>
				</tr>
		  </table>
       -->
    [/align]
</div>		
</body>
</html>


//Controller
@RequestMapping(value = "/test/importExcel")
public void importExcel(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "execelFile", required = false) MultipartFile file)
{
    ...
    testService.importExcel(file)
    ...
}

//TestService
public String importExcel(MultipartFile file) throws ExcelParseException {
	    String result = null;
		// 存入服务器目录
		String fileName = "";
		String filePath = PathUtil.getClasspath();
		if (file != null && file.getSize() > 0) {
			fileName = FileUpload.fileUp(file, filePath, DateUtil.getSeconds());
		}
		try{
			// 读取Excel文件
			List<HashMap> readExcel = ExcelUtils.readExcel(filePath, fileName, 0, 0, 0);
			if (readExcel == null || readExcel.size() <= 1) {
				throw new ExcelParseException("读取文件失败!可能原因如下:\n1、文件为无效文件\n2、文件无记录");
			}
			//数据库操作
		}
		...
}

//Excel读取工具

package util;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

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 jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Colour;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

public class ExcelUtils {
	/**
	 * @param filepath //文件路径
	 * @param filename //文件名
	 * @param startrow //开始行号
	 * @param startcol //开始列号
	 * @param sheetnum //sheet
	 * @return list
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static List<HashMap> readExcel(String filepath, String filename, int startrow, int startcol, int sheetnum) {
		List<HashMap> varList = new ArrayList<HashMap>();
		try {
			File target = new File(filepath, filename);
			FileInputStream fi = new FileInputStream(target);
			HSSFWorkbook wb = new HSSFWorkbook(fi);
			HSSFSheet sheet = wb.getSheetAt(sheetnum); 					//sheet 从0开始
			int rowNum = sheet.getLastRowNum() + 1; 					//取得最后一行的行号
			for (int i = startrow; i < rowNum; i++) {					//行循环开始
				HashMap varpd = new HashMap();
				HSSFRow row = sheet.getRow(i); 							//行
				int cellNum = row.getLastCellNum(); 					//每行的最后一个单元格位置
				for (int j = startcol; j < cellNum; j++) {				//列循环开始
					
					HSSFCell cell = row.getCell(Short.parseShort(j + ""));
					String cellValue = null;
					if (null != cell) {
						switch (cell.getCellType()) { 					// 判断excel单元格内容的格式,并对其进行转换,以便插入数据库
						case 0:
							cellValue = String.valueOf((int) cell.getNumericCellValue());
							break;
						case 1:
							cellValue = cell.getStringCellValue();
							break;
						case 2:
							cellValue = cell.getNumericCellValue() + "";
							// cellValue = String.valueOf(cell.getDateCellValue());
							break;
						case 3:
							cellValue = "";
							break;
						case 4:
							cellValue = String.valueOf(cell.getBooleanCellValue());
							break;
						case 5:
							cellValue = String.valueOf(cell.getErrorCellValue());
							break;
						}
					} else {
						cellValue = "";
					}
					varpd.put("var"+j, cellValue);
				}
				varList.add(varpd);
			}

		} catch (Exception e) {
			System.out.println(e);
		}
		
		return varList;
	}
	/**
	 * @param dirPath:文件要保存的目录
	 * @param fileName:文件要保存的文件名
	 * @param title:报表的题目
	 * @param columnTitle:列名集合(类型为List)
	 * @param text:正文数据(类型为两级嵌套List) 
	 * return boolean
	 */
	public static boolean writeExcel(String dirPath, String fileName, String title,List columnTitle, List text) {
		WritableWorkbook workBook = null;
		WritableSheet sheet = null;
		if (dirPath == null || "".equals(dirPath) || fileName == null || "".equals(fileName)) {
			System.out.println("建立excel文件失败:路径或文件名为空");
			return false;
		}
		File filePath = new File(dirPath); 
		if (!filePath.exists()) {
			// 如果文件要保存的目录不存在则产生该目录
			if (!filePath.mkdir()) {
				System.out.println("建立excel文件失败:无法建立该目录");
				return false;
			}
		}
		// 在该目录下产生要保存的文件名
		String excelPath = dirPath + "/" + fileName + ".xls";
		File excelFile = new File(excelPath);
		// 以下开始输出到EXCEL
		try {
			if (!excelFile.exists()) {
				if (!excelFile.createNewFile()) {
					System.out.println("建立excel文件失败:建立excel文件发生异常");
					return false;
				}
			}
			/** **********创建工作簿************ */
			workBook = Workbook.createWorkbook(excelFile);
			/** **********创建工作表************ */
			sheet = workBook.createSheet("Sheet1", 0);
			// SheetSettings sheetSet = sheet.getSettings();
			// sheetSet.setProtected(false);
			/** ************设置单元格字体************** */
			WritableFont headFont = new WritableFont(WritableFont.createFont("宋体"), 16, WritableFont.BOLD);
			WritableFont head2Font = new WritableFont(WritableFont.createFont("宋体"), 13, WritableFont.BOLD);
			/** ************以下设置几种格式的单元格************ */
			// 用于表头
			WritableCellFormat wcf_head = new WritableCellFormat(headFont);
			wcf_head.setVerticalAlignment(VerticalAlignment.CENTRE); // 文字垂直对齐
			wcf_head.setAlignment(Alignment.CENTRE); // 文字水平对齐
			wcf_head.setWrap(false); // 文字是否换行
			// 用于第三行列名
			WritableCellFormat wcf_column = new WritableCellFormat(head2Font);
			wcf_column.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
			wcf_column.setVerticalAlignment(VerticalAlignment.TOP); 
			wcf_column.setAlignment(Alignment.LEFT); // 文字左对齐
			wcf_column.setBackground(Colour.GRAY_25);
			wcf_column.setWrap(true); // 文字是否换行
			// 用于正文
			WritableCellFormat wcf_center = new WritableCellFormat(new WritableFont(WritableFont.createFont("宋体"), 13));
			wcf_center.setBorder(Border.ALL, BorderLineStyle.THIN); // 线条
			wcf_center.setVerticalAlignment(VerticalAlignment.TOP); // 文字垂直对齐
			wcf_center.setAlignment(Alignment.LEFT); // 文字水平对齐
			wcf_center.setWrap(true); // 文字是否换行
			/** ************单元格格式设置完成****************** */
			sheet.setColumnView(0, 10);sheet.setColumnView(1, 10);sheet.setColumnView(2, 20);
			sheet.setColumnView(3, 16);sheet.setColumnView(4, 16);sheet.setColumnView(5, 20);
			sheet.setColumnView(6, 20);sheet.setColumnView(7, 19);sheet.setColumnView(8, 16);
			sheet.setColumnView(9, 16);sheet.setColumnView(10, 16);sheet.setColumnView(11, 16);
			sheet.setRowView(0, 640);
			sheet.getSettings().setLeftMargin(0.1d);//0.1d=0.26cm
			sheet.getSettings().setRightMargin(0.1d);
			/** ***************以下是报表的内容********************* */
			// 合并单元格设置excel的题目
			sheet.mergeCells(0, 0, columnTitle.size() - 1, 0);
			sheet.addCell(new Label(0, 0, title, wcf_head));
			int x = 1;
			// 设置列名
			for (int i = 0; i < columnTitle.size(); i++) {
				sheet.addCell(new Label(i, x, String.valueOf(columnTitle.get(i)), wcf_column));
			}
			x = x + 1;

			// 写入正文数据
			for (int i = 0; i < text.size(); i++) {
				List content = (List) text.get(i);
				if (content != null && content.size() > 0) {
					for (int j = 0; j < content.size(); j++) {
						String data = String.valueOf(content.get(j));
						sheet.addCell(new Label(j, x + i, data, wcf_center));
					}
				}
			}
			/** **********以上所写的内容都是写在缓存中的,下一句将缓存的内容写到文件中******** */
			workBook.write();
			
		} catch (Exception e) {
			System.out.println("建立excel文件失败:" + e.getMessage());
			return false;
		} finally {
			/** *********关闭文件************* */
			try {
				if (workBook != null) {
					workBook.close();
				}
			} catch (Exception ex) {
				System.out.println("关闭文件流失败:" + ex.getMessage());
				return false;
			}
		}
		return true;
	}
	
}

0
0
分享到:
评论

相关推荐

    WEB文件上传之SpringMVC+ajaxfileupload使用(三)

    综上所述,SpringMVC与AJAXFileUpload的结合使用,可以实现高效且用户体验良好的文件上传功能。在实际开发中,我们需要关注前后端的交互细节,同时确保安全性与性能。在项目中,`upload`目录可能包含了相关的示例...

    AjaxFileUpload

    这里,AjaxFileUpload使用Ajax技术实现了文件上传时页面的不刷新。 2. **文件上传**:文件上传是Web应用程序的基本功能之一,允许用户将本地文件传送到服务器。在AjaxFileUpload中,这个过程是在后台完成的,用户...

    一个支持Jquery3 的ajaxfileupload.js

    通过修改终于使得ajaxfileupload兼容jquery3,代码已上线运行。

    ajaxfileupload demo php

    - **前端与后端通信**:AjaxFileUpload使用Ajax技术,实现了前端与后端PHP脚本的通信。 - **文件上传安全**:`upload.php`应包含防止非法文件上传的措施,如检查文件类型和大小。 - **错误处理**:前端和后端都需要...

    ajaxfileupload.js

    在提供的`ajaxfileupload使用方法.txt`文档中,应该详细解释了如何配置和使用AjaxFileUpload.js,包括所有可用的选项和回调函数的用法。通过仔细阅读这份文档,开发者可以更好地理解和利用这个库来实现高效、用户...

    jQuery插件ajaxFileUpload使用详解

    ajaxFileUpload.js 很多同名的,因为做出来一个很容易。 我用的是这个:https://github.com/carlcarl/AjaxFileUpload 下载地址在这里:http://xiazai.jb51.net/201701/yuanma/ajaxfileupload(jb51.net).rar ...

    ajaxfileupload 返回时 去掉 <pre>与 jquery1.7支持解决 方法

    其次,关于jQuery 1.7的兼容性问题,这可能涉及到AjaxFileUpload使用了一些在新版本中已被弃用或者改变的方法。jQuery的每个版本都有可能对API进行调整,因此,旧的插件或代码可能需要更新以适应新的库。对于...

    ajaxfileupload.js完整使用全套(带对应jquery+demo)

    在本文中,我们将深入探讨`ajaxfileupload.js`的完整使用方法,以及它与jQuery的集成。`ajaxfileupload.js`是一个JavaScript库,用于实现异步文件上传功能,避免了传统文件上传时页面刷新的问题。它与jQuery的结合...

    ajaxfileupload

    1. **无需页面刷新**:使用`ajaxFileUpload`,文件上传过程中,页面不会重新加载,用户可以继续进行其他操作。 2. **进度反馈**:可以方便地添加进度条显示文件上传进度,提升用户体验。 3. **错误处理**:异步上传...

    使用ajaxFileUpload.js上传文件

    本篇文章将深入探讨`AjaxFileUpload.js`的工作原理、使用方法及其相关知识点。 `AjaxFileUpload.js`通常与服务器端的脚本配合使用,如PHP、ASP.NET或Node.js等,以接收并处理上传的文件。它利用HTML5的File API和...

    AjaxFileUpload.js

    在本文中,我们将深入探讨AjaxFileUpload.js的工作原理、使用方法以及相关的前端文件上传技术。 一、AjaxFileUpload.js概述 AjaxFileUpload.js是基于Ajax技术的,其主要目的是解决传统HTML表单提交文件时页面必须...

    ajaxfileupload.js用于文件上传

    ajaxfileupload.js用于文件上传

    使用ajaxFileUpload实现图片上传

    `ajaxFileUpload`主要依赖于jQuery库,因此在使用前确保已经引入了jQuery。首先,我们需要在HTML页面中添加一个用于选择文件的`&lt;input&gt;`元素,例如: ```html ``` 接下来,我们需要编写JavaScript代码来初始化`...

    ajaxFileUpload

    **AjaxFileUpload** 是一个JavaScript库,主要用于实现无刷新的文件上传功能,尤其适用于上传图片。这个库在前端处理上提供了高效且用户友好的体验,因为它允许用户在不重新加载整个网页的情况下完成文件上传操作。...

Global site tag (gtag.js) - Google Analytics