文件上传与下载、ajax上传文件

一,导出固定模板

1,两次调用encodeURI来解决乱码问题
id="+id+"&roleName="+encodeURI(encodeURI(roleName))+"&roleType="+roleType;
JAVA后台:
roleName = java.net.URLDecoder.decode(getRequest().getParameter("roleName"),"UTF-8");

假设项目upload文件下有 债券品种信息.xls 模板

public void uploadTemplate(HttpServletRequest request, HttpServletResponse response) {
	String filePath = "债券品种信息.xls";
	filePath = URLEncoder.encode(filePath , "utf-8");

	String tempFile = File.separator + "upload" + File.separator + filePath ;
	String pathURL = request.getSession().getServletContext().getRealPath(tempFile);
	File file = new File(pathURL);
	FileInputStream input = null;
	try {
		input = new FileInputStream(file);

		OutputStream out = response.getOutputStream();
		byte[] b = new byte[2048];
		int len;
		while ((len = input.read(b)) != -1) {
			out.write(b, 0, len);
		}
		response.setHeader("Content-disposition", "attachment;fileName=" + filePath);
	    response.setContentType("application/vnd.ms-excel;utf-8");
		response.setHeader("Content-Length", String.valueOf(input.getChannel().size()));
		input.close();
		out.close();
	} catch (Exception e) {
		e.printStackTrace();
	}
}

ajax上传文件

<input type="hidden" id="taskId" value="${taskId }">
<input type="hidden" id="groupId" value="${groupId }">
<input type="hidden" id="userId" value="${userId }">
<input id="import_Excel" type="file">

var formData = new FormData();
var name = $("#import_Excel").val();
formData.append("file_data",$("#import_Excel")[0].files[0]);
formData.append("name",name);

	var taskId = $("#taskId").val();
	var groupId = $("#groupId").val();
	var account = $("#account").val();
	    var reqParam='{"taskId":"' + taskId
	        + '","groupId":"' + groupId
	        + '","owner":"' + account
	        + '"}';
    formData.append("reqParam",reqParam);

	$.ajax({
		url: "cooperation/importFile.do",
		type: "post",
		async : false,
		data: formData,
		processData : false,
		contentType : false,
		success: function(data){
		}
	})
@RequestMapping(value = "/importFile.do", method = RequestMethod.POST)
@ResponseBody
public ResultDTO<ImportModel> importFile( MultipartFile file_data, String reqParam) {
    	String fileName = file_data.getOriginalFilename();
    	CommonsMultipartFile cf = (CommonsMultipartFile) file_data;
		DiskFileItem fi = (DiskFileItem) cf.getFileItem();
		File bipfile = fi.getStoreLocation();
}

二,根据模板导出数据

public class RelationShipController {
	public void ExportRelationShipExcel(HttpServletResponse response) {
		InputStream inputStream = RelationShipController.class.getResourceAsStream("RelationShip.xls");
		Workbook wb= WorkbookFactory.create(inputStream );
		
		//保存字段与列位置关系
		List<String> keyList = new ArrayList<String>();
		for (int sheetNum = 0; sheetNum < wb.getNumberOfSheets(); sheetNum++) {
       		 Sheet sheet = wb.getSheetAt(sheetNum);
        	 //取第二行的值作为 映射
        	 Row rowNum = sheet.getRow(1);
        	 for(int cellNum=0;cellNum<rowNum .getLastCellNum();cellNum++) {
        		Cell cell = rowNum .getCell(cellNum);
        		String cellValue = "";
        		if(cell !=null) {
        			cellValue = cell.getStringCellValue();
        		}
        		keyList.add(cellValue);
       		 }
   		 }
		
		//删除Excel第二行数据
		for (int sheetNum = 0; sheetNum < wb.getNumberOfSheets(); sheetNum++) {
        	Sheet sheet = wb.getSheetAt(sheetNum);
        	//直接删除第二行即可
        	sheet.shiftRows(1 + 1, 1 + 1, -1); //shift的时候,以1作为开始, -1表示删除
   	    }
		//获取导出数据
		List<Map<String,Object>> shipExcel = new ArrayList<Map<String,Object>>();
		for(int sheet=0;sheet<template.getNumberOfSheets();sheet++) {
			Sheet sheetAt = wb.getSheetAt(sheet);
			for(int i=0;i<shipExcel.size();i++) {
				Row createRow = sheetAt.createRow(i+1);
				Cell createCell = null;
				for(int cellNum=0;cellNum<keyList .size();cellNum++) {
					createCell=createRow.createCell(cellNum);
					createCell.setCellType(HSSFCell.CELL_TYPE_STRING);
					createCell.setCellValue(shipExcel.get(i).get(keyList .get(cellNum).toUpperCase())+"");
				}
			}
		}
		response.setCharacterEncoding("utf-8");
		response.setContentType("application/vnd.ms-excel;utf-8");
		response.setHeader("Cache-Control", "no-cache");
		response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
		wb.write(response.getOutputStream());
	}    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值