`
wfzhanga
  • 浏览: 70220 次
  • 性别: 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();
}

 

分享到:
评论

相关推荐

    Java+flex使用dom4j读写xml

    这个小例子是使用Java作为服务端、Flex做前台,对一个xml文件的读取和写入。 环境:MyEclipse6.0.1+Flex3插件版,jdk1.6,tomcat6.0,dom4j1.6.1,lcds.war, 使用技术:1.Java+flex,及其对象的转换。 2.Java方面...

    java+flex原码

    Java和Flex是两种在开发富互联网应用程序(RIA)时常用的技术。Java以其强大的后端处理能力和跨平台特性闻名,而Flex则是一种基于ActionScript的前端框架,主要用于构建交互性强、图形用户界面丰富的Web应用。本资源...

    基于java+flex实现的聊天程序

    《基于Java+Flex实现的聊天程序详解》 在信息技术领域,构建实时的在线聊天系统是一项常见的挑战。本项目“基于Java+Flex实现的聊天程序”提供了一种有效的解决方案,它结合了Java的强大后端处理能力和Flex的富...

    j2ee+flex4

    java+flex4 使用的是BlazeDS方式中得 remoting方式与JAVA交互 由于没有美工 UI十分丑陋望学者见谅 目前功能只实现了这些 flex 根据状态切换改变页面显示和页面跳转 1.登陆 2.商品管理 (商品的 增删改查 ) 双击...

    java+flex通信源码

    Java和Flex之间的通信是开发富互联网应用程序(RIA)时的一项关键技术。这个"java+flex通信源码"项目提供了一个实际的、完整的示例,演示了如何利用BlazeDS技术实现Java后端与Flex前端的无缝交互。下面我们将深入...

    java+flex+blazeds配合例子

    Java、Flex和BlazeDS是开发富互联网应用程序(RIA)时常用的一组技术组合。Java在后端提供数据处理和业务逻辑,而Flex作为前端UI框架...解压并研究这些文件,将有助于你更好地理解和实践Java+Flex+BlazeDS的整合开发。

    java+flex小例子(附文档)(出现了404错误,后来发现原来是版本的问题)

    提供的文件“javaflex blazeds.pdf”可能是关于如何配置和使用BlazeDS的文档,这对于理解Java和Flex之间的通信至关重要。而“flexweb”可能是一个Flex项目文件夹,包含MXML和ActionScript代码,用于创建前端用户界面...

    Java+Flex+BlazeDS HelloWorld例子

    这篇名为"Java+Flex+BlazeDS HelloWorld例子"的博客文章,很可能是对如何使用这些技术进行基本的示例演示。通过阅读这篇文章,我们可以学习到如何配置和运行一个简单的Java和Flex应用,以及BlazeDS在其中的角色。 1...

    flex留言板java+flex+lcds项目源码

    【Flex留言板Java+Flex+LCDs项目源码详解】 Flex是一种基于ActionScript的开源框架,主要用于构建富互联网应用程序(Rich Internet Applications,RIAs)。在本项目中,它与Java和LCDS(LiveCycle Data Services)...

    Oracle + jdbcTemplate + Spring + Java + Flex 实现分页.docx

    在Oracle数据库环境中,结合Spring、Java和Flex进行分页查询是常见的需求。本文档主要讨论如何利用Oracle存储过程、jdbcTemplate(Spring框架的一个组件)以及Flex前端实现这一功能。 首先,Oracle存储过程是实现...

    JAVA+FLEX实现摄像头捕捉图像

    本教程将探讨如何使用JAVA和FLEX技术实现摄像头捕捉图像。JAVA和FLEX是两种不同的技术,但可以协同工作以实现跨平台的富互联网应用程序(RIA)。 首先,JAVA作为一个强大的后端开发语言,主要负责处理服务器端逻辑...

    java+flex基于socket的聊天案例

    Java和Flex是两种常用于构建富互联网应用程序(RIA)的技术,它们可以协同工作,提供实时、交互式的用户体验。在这个“java+flex基于socket的聊天案例”中,我们将深入探讨如何利用Java作为服务器端技术,Flex作为...

    Oracle + jdbcTemplate + Spring + Java + Flex 实现分页

    ### Oracle + jdbcTemplate + Spring + Java + Flex 实现分页 #### 一、Oracle存储过程分页 在Oracle数据库中,为了实现高效的分页查询,通常会采用存储过程的方式来完成。这种方式能够有效地减少网络传输的数据量...

    坦克大战 经典小游戏 Java+FLEX编写源程序

    这个项目是用Java和FLEX两种技术编写的,展示了跨平台游戏开发的可能性。Java是一种广泛使用的编程语言,尤其在服务器端和企业级应用中表现出色;而FLEX则是一种用于构建富互联网应用程序(RIA)的框架,主要应用于...

    Java+Flex的环境搭建

    这个是MyEclips6.6+Flex 3.0 的工程搭建。这是个将Java和Flex整合在一个完整的工程里的一个环境搭建手册。步骤清晰。

    FlexBuilder与MyEclipse整合心得(java+flex)

    本篇文章主要探讨了如何将Adobe FlexBuilder与Eclipse平台中的MyEclipse整合,以便于开发Java和Flex混合应用。FlexBuilder是一款专门用于构建Flex(ActionScript和MXML)应用的集成开发环境(IDE),而MyEclipse则是...

    java+flex3开发实例及相关资源

    里面含有 blazeds.war包 以及相关教程,和一个 flex3跟struts2.16+hibernate3.25+spring2.5组合的实例和相应数据库,不过里面没有jar包,如有需要,可以向我要 QQ 826785300

    Java+Flex在线电影网站源代码. java网站 flex播放视频

    这是一个基于Java和Flex技术构建的在线电影网站源代码项目,主要功能是实现视频的在线播放。下面将详细解析这个项目的各个组成部分以及相关的知识点。 首先,`Java`是后端开发的主要语言,它提供了服务器端的功能...

    flex+java+mysql登录

    在"flex+java+mysql登录"这个场景中,我们主要探讨的是如何使用Flex客户端与Java后台进行通信,以及通过Java处理数据库交互来实现用户登录功能。 1. Flex数据库操作:Flex中的数据访问通常通过 BlazeDS 或 LCDS ...

Global site tag (gtag.js) - Google Analytics