零碎笔记

1、Base64Encoder 用法

1) Flex 前台编码,后台解码

	//Flex 代码 前台编码 					
    var ebt:ByteArray ; //你的值
    var b64encoder:Base64Encoder = new Base64Encoder();
    b64encoder.insertNewLines = false;	//每隔76个字符插入指定字符使输出换行。
    b64encoder.encodeBytes(ebt);	//编码,并将结果添加到内部缓冲区
    var strB:String = b64encoder.toString();	//获取 Base64 编码的字符串,该方法会同时清除缓冲区。
                  		
    var url:String = "http://localhost:8080/bi/ljkTestServlet";
    var request:URLRequest = request= new URLRequest(url);
    var urlVariables:URLVariables=new URLVariables();	//该类可以在应用程序与服务器之间传输变量
						
    urlVariables.username = "peipei";  
    urlVariables.password = "123456";
    urlVariables.byteArray = strB; 
                  	
    request.data = urlVariables;
    request.method = URLRequestMethod.POST;
    try {  
        urlLoader.load(request);//开始发送请求  
    } catch (error:Error) {  
        trace(error);  
    }  


//Java 后台代码
	public void service(HttpServletRequest request,HttpServletResponse response)
			throws ServletException,IOException{
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		String byteArray = request.getParameter("byteArray");
		BASE64Decoder decoder = new BASE64Decoder(); 
		byte[] b = decoder.decodeBuffer(byteArray); //解码
		File f = new File("d:\\book.txt"); 
		if(f.exists()){
			System.out.print("文件存在");
		}else{
		    System.out.print("文件不存�在");
		    f.createNewFile();//不存在则创建
		}
		FileOutputStream output = new FileOutputStream(f);
		try{
			output.write(b);
			output.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}	


2 、flex Mec 前台导出 excel 文件。弹出 系统“保存” 窗口。

    //Flex 代码                	
	var exp:MecExporter = new MecExporter();
	exp.charset="gbk";
                       
	// add MecGrid with sheetname
	exp.AddDataGrid(mecex, "");//mecex 为 MecGrid 对象
	// exporting to binary data
	var ebt:ByteArray = exp.Export2BiffExcel();
                        
	//保存excel
	var f:FileReference = new FileReference();  
	f.save(ebt,(this.title==""?"报表":this.title)+".xls");

3、flex java 整合导出文件,将生成的文件发送到前台 或 点击某按钮,弹出 打开/保存/取消窗口 来打开或保存文件 弹出窗口 如图:


关键在于:1)设置 response 的 contentType 。

     2)flex 的 Http 请求方式。

逻辑:将前台生成的文件转为通用的 ByteArray ,以流的形式发送到后台,后台设置消息头为文件,再以流的形式返回到前台即可。

    //前台Flex 代码                	
	var exp:MecExporter = new MecExporter();
	exp.charset="gbk";
                       
	// add MecGrid with sheetname
	exp.AddDataGrid(mecex, "");//mecex 为 MecGrid 对象
	// exporting to binary data
	var ebt:ByteArray = exp.Export2BiffExcel();
                        
	var request:URLRequest = new URLRequest("/bi/servlet/ljkTestServlet");  
	request.method="POST";
	request.data=ebt;
	request.contentType = "application/octet-stream"; //这个很重要,设置成流数据
	navigateToURL(request,"_blank"); //这个请求方式也很重要。因为要浏览器触发下载事件,所以就不用异步方式打开连接了


后台java代码

package hj.nerp.uic.servlet;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import sun.misc.BASE64Decoder;

/**
 * 下载 excel 文件。 
 * 
 * 文件数据是由 前台编码为 ByteArray 传输到后台来的。
 * 
 * 注意:1)要想前台能弹出下载窗口,response的contentType 要正确设置。
 * 
 * 		2)中文文件名 需要进行一次编码,不然前台乱码。
 * 
 * @author LJK 
 * @data 2013-07-19
 *
 */
public class MecGridDownload extends HttpServlet{
	
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String browserType = request.getHeader("user-agent");//浏览器类型
		String excelName = request.getParameter("excelName");//文件名
		String byteArray = request.getParameter("byteArray");//文件字节
		if(excelName == null){
			excelName = "报表";
		}
		if(byteArray == null){
			throw new IOException("没有收到 表格数据");
		}
		
		BASE64Decoder base64d = new BASE64Decoder();
		byte[] excelbyte = base64d.decodeBuffer(byteArray);
		
		response.reset(); 	//清除下 response中的缓存信息
		response.setContentType("application/vnd.ms-excel"); //内容是excel文件
		response.setCharacterEncoding("utf-8");
		
		//对文件名进行编码,否则乱码
		String excelNameEncode = null;
		if(browserType.toLowerCase().indexOf("chrome") != -1){
			excelNameEncode = new String(excelName.getBytes("utf-8"), "ISO_8859_1");//Chrome
		}else{
			excelNameEncode =  java.net.URLEncoder.encode(excelName, "UTF-8"); //IE8 OK 限制:不能大于16个中文字符。
		}
		response.setHeader("Content-Disposition","attachment;filename="+ excelNameEncode);
		
		//读数据
		OutputStream outputStream = response.getOutputStream();
		outputStream.write(excelbyte);
		outputStream.flush();
		outputStream.close();
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值