`
NewTamato
  • 浏览: 101478 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

上传文件 flex客户端php服务器端

阅读更多

其实这样的上传源代码在网上已经是很多了。但是考到本地总是不成功。本人好不容易将这个工程实现了。心情一大畅快!

首先我们看一下客户端。客户端是很简单的主要用到了FileReference

客户端代码如下:

           <?xml version="1.0" encoding="utf-8"?>  
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init();" >  
    <mx:Script>  
        <![CDATA[  
            import flash.net.FileReference;  
            import mx.controls.Alert;  
            import mx.events.CloseEvent;  
            import flash.events.*;  
                          
            private var file : FileReference;  
            private var uploadURL : URLRequest;  
              
            private function init() : void{  
                Security.allowDomain("*");   
                file = new FileReference();   
                file.addEventListener(ProgressEvent.PROGRESS, onProgress);   
                file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,onUPLOAD_COMPLETE_DATA);
                file.addEventListener(Event.SELECT, onSelect);  
                uploadURL = new URLRequest();   
                uploadURL.url = "http://localhost:9090/New/php/NewUPLoader.php";   
            }  
              
            private function upload() : void{  
                var imageTypes:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg; *.jpeg; *.gif; *.png");  
                var allTypes:Array = new Array(imageTypes);  
                file.browse(allTypes);  
            }  
              
            private function onSelect(e : Event) : void{  
                Alert.show("上传 " + file.name + " (共 "+Math.round(file.size)+" 字节)?",    "确认上传",Alert.YES|Alert.NO,null,proceedWithUpload);  
            }  
              
            private function onProgress(e:ProgressEvent) : void{  
                lbProgress.text = " 已上传 " + e.bytesLoaded + " 字节,共 " + e.bytesTotal + " 字节";  
            }  
              
            private function proceedWithUpload(e : CloseEvent) : void{  
                if (e.detail == Alert.YES){  
                    file.upload(uploadURL);  
                }  
            }
            private function onUPLOAD_COMPLETE_DATA(evt:DataEvent):void
            {
             Alert.show(evt.data.toString()); 
            }  
        ]]>  
    </mx:Script>  
      
    <mx:Canvas width="100%" height="100%">  
        <mx:VBox width="100%" horizontalAlign="center">  
        </mx:VBox>  
        <mx:Button label="上传文件" click="upload();" y="91"/>  
        <mx:Label id="lbProgress" text="上传" x="87.5" y="26"/>  
    </mx:Canvas>  
</mx:Application> 

 

其中要注意的一点是uploadURL.url = "http://localhost:9090/New/php/NewUPLoader.php";   

这里面我们要注意。因为我的服务器按在了本机上所以我的访问地址是localhost。服务器默认的端口号是8080.但是我将她的端口改为了9090.这个需要在apach/conf/httpd.conf中使用listen 的值改为9090即可!

然后New是我的服务器工程名。php/NewUPLoader.php是我在New工程下的应用程序路径。

然后 我们看看服务器端的代码:

             <?php    
// Flash  上传文件的信息默认的名称是Ϊ Filedata

当然这个  可以改变,只要在上传的时候使用fileRerence.upLoad(uriRequest,'你想要的上传标识名称');
$fileName = $_FILES["Filedata"]["name"];

$file = $_FILES["Filedata"]["tmp_name"];    
$path = "uploadFiles/";    
if (move_uploaded_file($file, $path . $fileName)){    
 echo 1;    
}else{    
 echo 0;    
}  

 

服务器成功发来1,这个时候客户端由于监听了dataEvent事件就可以将event.data输出。如果是1那么就上传成功。如果不是就失败!

还有一点每次修改应用程序的代码,服务器都要重启。有时要有点耐心。等带服务器启动完毕在发送请求。

启动是否成功就用http://localhost:9090/index.html来检查。这个成功别的就可以访问!

       

分享到:
评论
1 楼 NewTamato 2009-02-24  
chenjunceo 写道

从这篇文章来看,楼主从事的应该是Flex+PHP的B/S开发?

我是flex java开发,自学一下php,呵呵呵。

相关推荐

Global site tag (gtag.js) - Google Analytics