`
wfzhanga
  • 浏览: 68652 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

最近在开发过程遇到一些小问题,是以前没怎么弄过的,过来这里记录一下:

 

1:flex安全沙箱问题。

问题描述:flex在flashplay9.0后增加新的功能:安全沙箱。

一般在发布服务时,flex客户端有一个默认的安全域:如:http://localhost:7001/,但如果你在服务中调用http://127.0.0.1:7001/时就会报安全沙箱冲突的错误,虽然两地址可能在本地代理中,是同一服务地址,但还是属于夸域。

解决办法,有如下几种:

1)在服务器根目录下,放入如下文件:crossdomain.xml,测试访问:http://127.0.0.1:7001/crossdomain.xml,这个对于tomcat是直接可以放入root目录,但有web服务器,可能得设置一下,如建立一个'/'的服务。这样flex客户端在跨域时,会先去查看crossdomain.xml里的相关规则。

2)手动加载crossdomain.xml:

Security.loadPolicyFile(“http://127.0.0.1:7001/gmap/crossdomain.xml”);

3)中转服务,如将跨哉操作改到jsp文件或后台服务端里进行。

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE cross-domain-policy SYSTEM  
    "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd" >  
<cross-domain-policy>
    <site-control permitted-cross-domain-policies="all" />  
    <allow-access-from domain="*" />  
    <allow-http-request-headers-from domain="*" headers="*"/>  
</cross-domain-policy> 

 

2.flex的上传功能:

private function upload(): void
{
       var docFilter:FileFilter = new FileFilter("Documents", "*.pdf;*.rar;*.txt;*.jpg;*.gif;*.png;*.xls;*..xlsx;*.doc;*.docx");
	fileUpLoad.addEventListener(Event.SELECT,selectedHandler);
	fileUpLoad.addEventListener(Event.COMPLETE,CompletedHandler);
	fileUpLoad.addEventListener(ProgressEvent.PROGRESS,progressHandler);
	fileUpLoad.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
	fileUpLoad.browse([docFilter]);
}

private function selectedHandler(e:Event):void
{
	fileUpLoad.removeEventListener(Event.SELECT,selectedHandler);
	Alert.show("上传 " + fileUpLoad.name + " (共 "+Math.round(fileUpLoad.size/1024)+"KB)?",  "确认上传",Alert.YES|Alert.NO, null,proceedWithUpload);
}
private function proceedWithUpload(e:CloseEvent): void
{   
	if (e.detail == Alert.YES)
	{   
		var request:URLRequest = new URLRequest("../fileUpload.do");
		try 
		{   
			fileUpLoad.upload(request);  
			this.loadbar.visible = true; 
		} catch (error:Error) 
		{   
			cancelUpload();
			this.loadbar.visible = false;
			Alert.show("上传失败","错误");
		}
	}
	if(e.detail == Alert.NO){
		cancelUpload();
	}   
} 
private function progressHandler(e:ProgressEvent):void
{
	lblProgress.text = " 已完成 " + e.bytesLoaded  + " 字节,共 " + e.bytesTotal + " 字节";   
	var proc: uint = e.bytesLoaded / e.bytesTotal * 100;   
	uploadbar.setProgress(proc, 100);   
	uploadbar.label= "当前进度: " + " " + proc + "%"; 
}
private function CompletedHandler(e:Event):void
{
	var reference:FileReference=e.target as FileReference;
	this.loadbar.visible = false;
	cancelUpload();
}
private function ioErrorHandler(e:IOErrorEvent):void
{
	this.loadbar.visible = false;
	cancelUpload();
	Alert.show(e.toString());
}


<mx:ProgressBar id="uploadbar" height="80%" labelPlacement="bottom" themeColor="#F20D7A" minimum="0"  visible="true" maximum="100" label="上传进度: 0%" direction="right" mode="manual" width="200"/>

 

                CheckFileExist(uploadPath, true);
		private int maxPostSize = 10 * 1024 * 1024;
		response.setContentType("text/html; charset=UTF-8");
		DiskFileItemFactory factory = new DiskFileItemFactory();
		factory.setSizeThreshold(1024 * 4);
		ServletFileUpload upload = new ServletFileUpload(factory);
		upload.setFileSizeMax(maxPostSize);
		List<?> fileItems = null;
		try {
			fileItems = upload.parseRequest(request);
			Iterator<?> iter = fileItems.iterator();
			while (iter.hasNext()) {
				FileItem item = (FileItem) iter.next();
				logger.info(item.toString());
				if (!item.isFormField()) {
					String filePath = uploadPath + item.getName();
					if (CheckFileExist(filePath, false)) {
						try {
							item.write(new File(filePath));
						} catch (Exception ex) {
							logger.info(ex.getMessage());
							message = "上传失败!|"+ex.getMessage();
						}
					}else{
						message = "文件已存在!";
					}
				}
			}
		} catch (FileUploadException ex1) {
			logger.info("FileUploadException->" + ex1.getMessage());
			message = "上传失败!|"+ex1.getMessage();
		}

 

  3.文件下载

 

private function downLoad():void
{
	var downloadURL:URLRequest = new URLRequest("../fileDownload.do");
	downloadURL.method=URLRequestMethod.POST;
	var params:URLVariables = new URLVariables;
	params.fileName = filename.label;
	downloadURL.data=params.toString();
	fileDownLoad.download(downloadURL, filename.label);
	fileDownLoad.addEventListener(Event.COMPLETE, completeHandler);
	fileDownLoad.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
	fileDownLoad.addEventListener(Event.CANCEL, cancelHandler);
}
private function cancelHandler(event:Event = null):void
{
	fileDownLoad.removeEventListener(Event.CANCEL, cancelHandler);
        fileDownLoad.removeEventListener(Event.COMPLETE, completeHandler);
         fileDownLoad.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}
private function completeHandler(event:Event):void
{
	cancelHandler();
	Alert.show("下载成功!","提示");
}
private function ioErrorHandler(e:IOErrorEvent):void
{
	cancelHandler();
	Alert.show(e.toString());
}

 

OutputStream out = response.getOutputStream();
InputStream in = new BufferedInputStream(new FileInputStream(uploadPath + fileName));
fileName = new String(fileName.getBytes(), "utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream;charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename=\""
	+ fileName + ";");
int len = 0;
byte[] buf = new byte[512];
try{
	while ((len = in.read(buf)) > 0) {
		out.write(buf, 0, len);
	}
}finally{
	out.close();
	in.close();
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics