flex上传文件到wcf restful

本文介绍了一个使用 WCF RESTful 服务实现的文件上传功能,包括 C# 后端代码示例及 Flex 客户端实现。
wcf restful 代码
 /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="stream">post文件流</param>
        /// <param name="file">提交时附带信息。本例子中当文件名用</param>
        /// <returns></returns>
        [WebInvoke(UriTemplate = "Add/{file}", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json)]
        public SampleItem AddFile(Stream stream, string file)
        {
            //获取web的上下文
            var ctx = WebOperationContext.Current;

            //判断附带信息。没有信息返回错误信息
            if (!string.IsNullOrEmpty(file))
            {
                //获得服务器保存文件的文件夹路径
                string folder = System.Web.Hosting.HostingEnvironment.MapPath("~/Files");
                //判断文件夹是否存在,不在时新建
                if (!Directory.Exists(folder))
                {
                    Directory.CreateDirectory(folder);
                }
                //获得随机数
                System.Random objRand = new Random();
                //获得当前日期
                System.DateTime date = DateTime.Now;
                //生成随机文件名
              string  saveName = date.Year.ToString() + date.Month.ToString() + date.Day.ToString() + date.Hour.ToString() + date.Minute.ToString() + date.Second.ToString() + Convert.ToString(objRand.Next(99) * 97 + 100);
                //拼接出随进文件名
                 string  fileName = file + saveName;
                //拼接路径和文件名
                 string path = Path.Combine(folder, fileName);
               
                //保存文件
                    using (FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write))
                    {
                        //获得上传文件的大小
                        long ByteLength = WebOperationContext.Current.IncomingRequest.ContentLength;
                        //生成数组
                        byte[] fileContent = new byte[ByteLength];
                        //读取文件流
                        stream.Read(fileContent, 0, fileContent.Length);
                        //文件写入
                        fs.Write(fileContent, 0, fileContent.Length);
                        //清空文件流换成
                        fs.Flush();
                       // ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
                        //返回信息
                        return new SampleItem() { Id = 11 , StringValue ="true"};
                    }

                 
            }
            else
            {
              //  ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.Accepted;
                //返回错误信息
                return new SampleItem() { Id = 22, StringValue = "false" };
            }
        
        }



flex 代码

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
			   xmlns:s="library://ns.adobe.com/flex/spark"
			   xmlns:mx="library://ns.adobe.com/flex/mx"
			   height="100" minWidth="150" minHeight="100">
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	
	<fx:Script>
		<![CDATA[
			import flash.globalization.NumberFormatter;
			
			import mx.controls.Alert;
			import mx.core.FlexGlobals;
			//接收用字段
			[Bindable]
			public var file:String;
			//实例化文件上传类
			var fileref:FileReference = new FileReference();
			//文件选择按钮
			protected function bt_sel_clickHandler(event:MouseEvent):void
			{
				//添加选择事件监听
				fileref.addEventListener(Event.SELECT,selectok);
				//添加异常事件监听
				fileref.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
				//添加上传完成事件监听
				fileref.addEventListener(Event.COMPLETE,completeHandler);
				//添加上传进度事件监听
				fileref.addEventListener(ProgressEvent.PROGRESS,profun);
				//添加上传完毕获取返回数据时间监听
				fileref.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,dataHandle);
				fileref.browse();
				 
				
			}
			
			//文件选择
			protected function selectok(event:Event):void
			{
				//获取选择目标
				var file:FileReference =  FileReference(event.target);
				//显示文件吗
				ti_url.text = file.name;
			
				//fileref.load();
			}
			
			//上传按钮时间
			protected function uploadfun(event:MouseEvent):void
			{
				//获取由外传入的文件吗
				var str:String = FlexGlobals.topLevelApplication.parameters.file;
				//如果未传值设置默认名为file
				if (str==null || str=="")
				{
					str = "file";
				}
				 //拼接上传url
				var url:URLRequest = new URLRequest('http://localhost:6309/Service1/Add/' + str ); 
//				if (fileref.data) { 
//					
//					fileref.addEventListener(Event.COMPLETE,uploadok); 
//					fileref.addEventListener(ProgressEvent.PROGRESS,profun); 
//					fileref.upload(url); 
//				} else { 
//					Alert.show('请先浏览文件并加载数据!','警告');
//				} 
				
				try
				{
					//上传
				fileref.upload(url);
					//鼠标设置为繁忙
				 cursorManager.setBusyCursor()	;
				 //禁用页面空间
				 setBt(false);
				} 
				catch(error:Error) 
				{
					Alert.show(error.message);
				}
				
				
			}
			
			
			//
//			protected function uploadok(event:Event):void
//			{
//				Alert.show('上传成功','温馨提示'); 
//				
//			}
			
			//上传进度事件监听
			protected function profun(event:ProgressEvent):void
			{
				//获取上传进度
				var i:int = int(event.bytesLoaded/event.bytesTotal*100); 
				//设置进度条
				pg_1.setProgress(i,100);
				
			} 
			
			
			
			
			//异常事件监听
			protected function ioErrorHandler(event:IOErrorEvent):void
			{
				 
				Alert.show(event.text);
				
			}
			
			//完成事件监听
			protected function completeHandler(event:Event):void
			{
			 //鼠标设置正常
			cursorManager.removeBusyCursor();
			//激活控件
			setBt(true);
				
			}
			//接收返回数据监听
			protected function dataHandle(event:DataEvent):void
			{
				//获取返回数据
				 var data:String = event.data;
				 //Alert.show(data);
				 //调用网页js方法
				 ExternalInterface.call("swfCallBack",data);
			}
			//设置控件状态
			protected function setBt(flag:Boolean):void
			{
			 bt_sel.enabled = flag;
			 bt_update.enabled = flag;
			 
			}
			
		]]>
	</fx:Script>
	
	
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	
	
	<s:HGroup left="5" right="5" top="10" height="50" horizontalAlign="center" paddingBottom="0"
			  paddingLeft="0" paddingRight="0" paddingTop="0" verticalAlign="middle">
		<s:TextInput id="ti_url" width="80%" height="30"/>
		<s:Button id = "bt_sel"   height="30" content="选择文件" click="bt_sel_clickHandler(event)" />
		<s:Button  id ="bt_update"  label="上传" height="30" click="uploadfun(event)"/> 
		
	</s:HGroup>
	<s:HGroup y="63" left="10" right="10" height="20" horizontalAlign="center" verticalAlign="middle">
		<mx:ProgressBar  mode="manual" height="90%" width="90%" id = "pg_1" maximum="100"/>
	</s:HGroup>
</s:Application>


嵌入页面代码


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!-- saved from url=(0014)about:internet -->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"> 
    <!-- 
    Smart developers always View Source. 
    
    This application was built using Adobe Flex, an open source framework
    for building rich Internet applications that get delivered via the
    Flash Player or to desktops via Adobe AIR. 
    
    Learn more about Flex at http://flex.org 
    // -->
    <head>
        <title></title>
        <meta name="google" value="notranslate" />         
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type="text/javascript" language="javascript">
            function swfCallBack(a) {
                alert(a);
            }
        </script>
     
    </head>
    <body>

           <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="300" height="100" id="updateHttp">
                <param name="movie" value="updateHttp.swf" />
                <param name="quality" value="high" />
                <param name="bgcolor" value="#ffffff" />
                <param name="allowScriptAccess" value="sameDomain" />
                <param name="FlashVars" value="file=测试"/>  
                <param name="allowFullScreen" value="true" />
                <!--[if !IE]>-->
                <object type="application/x-shockwave-flash" data="updateHttp.swf" width="300" height="100">
                    <param name="quality" value="high" />
                    <param name="bgcolor" value="#ffffff" />
                    <param name="allowScriptAccess" value="sameDomain" />
                    <param name="FlashVars" value="file=测试"/>  
                    <param name="allowFullScreen" value="true" />
                <!--<![endif]-->
                <!--[if gte IE 6]>-->
                    <p> 
                        Either scripts and active content are not permitted to run or Adobe Flash Player version
                        11.1.0 or greater is not installed.
                    </p>
                <!--<![endif]-->
                    <a href="http://www.adobe.com/go/getflashplayer">
                        <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />
                    </a>
                <!--[if !IE]>-->
                </object>
                <!--<![endif]-->
            </objec
      
    
   </body>
</html>


内容概要:本研究针对微电网在遭受拒绝服务(DoS)攻击时面临的功率分配不均与电能质量问题,提出了一种兼顾功率精确均分与电压频率质量恢复的抗攻击混合动态事件触发二次控制策略。该策略通过设计新型混合动态事件触发机制,有效减少控制器与分布式单元间的网络通信负担,同时增强系统对DoS攻击的鲁棒性。研究构建了完整的微电网二次控制框架,整合了分布式协同控制算法与事件触发通信机制,在保证系统稳定性的同时,实现了对频率、电压偏差的快速调节和有功/无功功率的精确分配。通过Simulink平台进行仿真实验,验证了所提方法在遭受DoS攻击及正常运行工况下均能有效维持微电网的稳定运行与高质量电能输出。; 适合人群:具备电力系统自动化、分布式控制或微电网相关基础知识,从事新能源、智能电网领域研究的研发人员及高年级研究生。; 使用场景及目标:① 解决微电网在通信受限及网络攻击场景下的协同控制难题;② 实现微电网在异常工况下功率均分与电能质量的双重优化;③ 为设计高安全性、高可靠性的智能微电网控制系统提供理论依据与仿真验证方案。; 阅读建议:本资源侧重于控制策略的设计与仿真验证,建议读者结合微电网基础理论与Simulink仿真技术,深入理解事件触发机制与抗DoS攻击控制算法的实现细节,并动手复现仿真案例以加深对系统动态性能与鲁棒性的认识。
内容概要:本文围绕《【太阳能学报EI复现】基于粒子群优化算法的风-水电联合优化运行分析(Matlab代码实现)》展开,系统阐述了采用粒子群优化算法(PSO)对风能与水力发电系统进行联合优化调度的研究方法与技术路径。研究聚焦于构建多能源互补协调的优化模型,详细论述了目标函数的设计、系统约束条件的处理、算法求解流程及收敛性分析,并通过Matlab编程实现了完整的仿真验证过程,有效提升了可再生能源系统的运行效率与稳定性。该工作属于电力系统智能优化领域,强调对高水平期刊论文的高精度复现,兼具理论深度与工程实用性,适用于科研复现、学术研究与教学参考。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事新能源优化调度、智能算法应用的工程技术人员。; 使用场景及目标:①用于复现《太阳能学报》等高水平期刊中关于风-水电联合调度的EI/SCI论文;②掌握粒子群算法在多源协同优化中的建模、编码与求解关键技术;③辅助完成学位论文、科研项目申报或学术竞赛中的仿真建模任务; 阅读建议:建议结合文中提供的网盘资源下载完整代码与文档资料,按照目录结构循序渐进学习,重点关注算法实现细节、电力系统建模逻辑与参数设置方法,同时可延伸学习灰狼优化算法、YALMIP工具包等先进优化技术,以全面提升科研仿真与创新能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值