[菜鸟求指点]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" width="600" height="400"  xmlns:net="flash.net.*" initialize="initEvent(event)" creationComplete="creationCompleteEvent(event)" xmlns:local="*">
    <fx:Declarations>
        <!-- 将非可视元素(例如服务、值对象)放在此处 -->
        <net:FileReferenceList id="fileReferenceList"
                               select="fileReference_select(event);"/>
        <mx:NumberFormatter id="filesizeFormatter" useThousandsSeparator="true"/>
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import flash.net.URLRequest;
            import flash.text.Font;
            
            import flashx.textLayout.formats.Float;
            
            import mx.binding.utils.BindingUtils;
            import mx.collections.ArrayCollection;
            import mx.controls.Alert;
            import mx.controls.ProgressBar;
            import mx.events.CollectionEvent;
            import mx.formatters.CurrencyFormatter;
            import mx.formatters.NumberFormatter;
            
            import org.bytearray.gif.player.GIFPlayer;
            
            private var FileDesc:String="Images(*.jpg;*gif;*.png;*.JPG;*.GIF;*.PNG)";
            private var Extension:String="*.jpg;*gif;*.png;*.JPG;*.GIF;*.PNG";
            private var Url:String="";
            private var FileFolder:String="";
            //public var angle:int=0;  
            private var urlrequest: URLRequest = new URLRequest(Url);  
            private var singleThreadFiles: Array = [];  
            private var file:FileReference; //要上传的文件
            private var arrColl:ArrayCollection = new ArrayCollection([]);
            [Bindable]
            public var angle:int=0;
            private var oldX:Number; //拖动开始是的坐标
            private var oldY:Number;
            private var _myGIFPlayer:GIFPlayer = new GIFPlayer();
            private var request:URLRequest;
            private var count:int=0;
            [Bindable]
            private var size:Number=0.0;
            private var ac:ArrayCollection = new ArrayCollection([]);
            private function initEvent(e:Event):void
            {   Url =ExternalInterface.call("setFlexUrl");
                var sUrl:String = "loading.gif"//ExternalInterface.call("setFlexGIFUrl");
                request = new URLRequest(sUrl);
                _myGIFPlayer.load(request);
                img.addChild(_myGIFPlayer);
                addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            //var aa:Boolean=typeof(root.loaderInfo.parameters["fileDesc"])=="undefined";
            }
            private function creationCompleteEvent(e:Event):void
            {
                //var aa:Boolean=typeof(LoaderInfo(this.root.loaderInfo).parameters["fileDesc"])=="undefined";
            }
            private function btn_click(evt:MouseEvent):void  
            {   
                var arr:Array = [];  
                arr.push(new FileFilter(FileDesc, Extension));  
                fileReferenceList.browse(arr);  
            }  
            
            private function fileReference_select(evt:Event):void
            {    angle = arrColl.length+fileReferenceList.fileList.length;
                for (var i:int = 0; i < fileReferenceList.fileList.length; i++){
                        if(angle <=15){
                            fileReferenceList.fileList[i].addEventListener(Event.COMPLETE, completeLoadFile);
                            fileReferenceList.fileList[i].load();
                        }else{
                            Alert.show("图片一次最多上传15张");
                            return;
                        }
                }
            }
            
            private function completeLoadFile(e:Event):void
            {    
                var loader:Loader = new Loader();
                var file:FileReference = e.target as FileReference;
                if(file.size>1024*1024*5)
                {
                    Alert.show("文件不能超过5M.","错误");
                    return;
                }
                loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void
                {
                    var bmp:Bitmap=loader.content as Bitmap;
                    var bmd:BitmapData;
                    if((bmp.width>bmp.height||bmp.width==bmp.height)&&bmp.width>800)
                    {
                        var rateW:Number=800/bmp.width;
                        var h:Number=rateW*bmp.height;
                        bmd=new BitmapData(800,h,true,0);
                        bmd.draw(bmp.bitmapData,new Matrix(rateW,0,0,rateW),null,null,null,true);
                        bmp=new Bitmap(bmd,"auto",true);
                    }
                    else if(bmp.height>bmp.width&&bmp.height>800)
                    {
                        var rateH:Number=800/bmp.height;
                        var w:Number=rateH*bmp.width;
                        bmd=new BitmapData(w,800,true,0);
                        bmd.draw(bmp.bitmapData,new Matrix(rateH,0,0,rateH),null,null,null,true);
                        bmp=new Bitmap(bmd,"auto",true);
                    }
                    var f:FileReference = e.target as FileReference;
                    f.removeEventListener(Event.COMPLETE, completeLoadFile);
                    size +=f.size/1024/1024;
                    size = new Number(size.toFixed(2));
                    arrColl.addItem({img:bmp,file:f});
                });
                loader.loadBytes(e.target.data);
            }
            public function removeFile(data:Object): void    
            {   
                var index: int = arrColl.getItemIndex(data);  
                var f:FileReference = data.file as FileReference;
                size = size-f.size/1024/1024;
                size = new Number(size.toFixed(2));
                if(size <0){
                    size =0;
                }
                if (index != -1 && index>0){
                    arrColl.removeItemAt(index);
                }else{    
                    arrColl.removeItemAt(0);
                    /* for(var i:int =0;i<arrColl.length;i++){
                        ac.addItem(arrColl.getItemAt(i));
                    } */
                    //ceshi.source = ac.getItemAt(0).img;
                    //tileList.dataProvider = ac;
                //    arrColl.enableAutoUpdate();
                    /*  if(s &&arrColl.length > 0){
                            var o:Object=arrColl[0];
                            var bmp:Bitmap=o.img as Bitmap;
                            /* var bmd:BitmapData;
                            if((bmp.width>bmp.height||bmp.width==bmp.height)&&bmp.width>800)
                            {
                                var rateW:Number=800/bmp.width;
                                var h:Number=rateW*bmp.height;
                                bmd=new BitmapData(800,h,true,0);
                                bmd.draw(bmp.bitmapData,new Matrix(rateW,0,0,rateW),null,null,null,true);
                                bmp=new Bitmap(bmd,"auto",true);
                            }
                            else if(bmp.height>bmp.width&&bmp.height>800)
                            {
                                var rateH:Number=800/bmp.height;
                                var w:Number=rateH*bmp.width;
                                bmd=new BitmapData(w,800,true,0);
                                bmd.draw(bmp.bitmapData,new Matrix(rateH,0,0,rateH),null,null,null,true);
                                bmp=new Bitmap(bmd,"auto",true);
                            }  
                            var files:FileReference = o.file;
                            arrColl.setItemAt({img:bmp,file:files},0);
                            //arrColl.refresh();
                    }  */
                    
                }
            }    
            
            private function uploadFile(): void  
            {                 
                for each (var obj:Object in arrColl)  
                {             
                    try  
                    {  
                        var f:FileReference = obj.file;
                        f.upload(urlrequest);  
                    }  
                    catch (e: Error)  
                    {  
                        Alert.show(e.message);  
                    }  
                }                 
            }  
            
            private function uploadFileOneByOne():void
            {    addimg.visible = true;
                var sl:int = arrColl.length;
                if(sl ==0){
                    Alert.show("请您添加图片");
                    addimg.visible = false;
                    return;
                }
                if(typeof(Url)!="undefined")
                {
                    var jssessionId:String=ExternalInterface.call("getSession");//";ddfdf=ff"//
                    urlrequest = new URLRequest(Url+jssessionId);
                }
                if(typeof(FileFolder)!="undefined")
                {
                    FileFolder =ExternalInterface.call("getRequestVal");
                }
                if(urlrequest.url==null || urlrequest.url=="")
                {
                    Alert.show("请求的地址不能为空.","错误");
                    addimg.visible = false;
                    return;
                }
                //var getSessionKey:String = ExternalInterface.call("getSessionKey");
                //var getSessionVal:String = ExternalInterface.call("getSessionVal");
                var variables:URLVariables = new URLVariables();
                //variables['canshu'] = FileFolder;
                //variables[getSessionKey]=getSessionVal;
                urlrequest.data=FileFolder;
                urlrequest.method  = URLRequestMethod.GET;
                count = arrColl.length;
                for each (var obj:Object in arrColl)  
                {
                    singleThreadFiles.push(obj.file);
                }
                singleThreadFiles.reverse();
                singleThreadUploadFile();
            }
            private function singleThreadUploadFile(): void  
            {      
                img.visible = true;
                masks.visible = true;
                //FIFO:逐个从列表中取出,进行同步上传  
                if (singleThreadFiles.length > 0)  
                {  
                    var f: FileReference = singleThreadFiles.pop() as FileReference;  
                    f.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
                    f.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, doSingleUploadFileComplete);  
                    f.upload(urlrequest);  
                }else{
                    img.visible = false;
                    masks.visible = false;
                    ExternalInterface.call("onUploaderComplete",count);  // 每上传完一个文件后调用js函数onUploaderComplete   
                }
            }  
            
            private function ioErrorHandler(o:Object):void{
                img.visible = false;
                masks.visible = false;
                addimg.visible = false;
                Alert.show(o.text.toString());
            }
            private function doSingleUploadFileComplete(event: Event): void  
            {   
                var f: FileReference = event.target as FileReference;  
                f.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA, doSingleUploadFileComplete);  
                var s:Object = arrColl.removeItemAt(0);
                if(s &&arrColl.length > 0){
                    var o:Object=arrColl[0];
                    var bmp:Bitmap=o.img as Bitmap;
                    var bmd:BitmapData;
                    if((bmp.width>bmp.height||bmp.width==bmp.height)&&bmp.width>800)
                    {
                        var rateW:Number=800/bmp.width;
                        var h:Number=rateW*bmp.height;
                        bmd=new BitmapData(800,h,true,0);
                        bmd.draw(bmp.bitmapData,new Matrix(rateW,0,0,rateW),null,null,null,true);
                        bmp=new Bitmap(bmd,"auto",true);
                    }
                    else if(bmp.height>bmp.width&&bmp.height>800)
                    {
                        var rateH:Number=800/bmp.height;
                        var w:Number=rateH*bmp.width;
                        bmd=new BitmapData(w,800,true,0);
                        bmd.draw(bmp.bitmapData,new Matrix(rateH,0,0,rateH),null,null,null,true);
                        bmp=new Bitmap(bmd,"auto",true);
                    }
                    var files:FileReference = o.file;
                    arrColl.setItemAt({img:bmp,file:files},0);
                }
                singleThreadUploadFile();  
            }
            private function RemoveAllFiles(event:Event):void
            {
                arrColl.removeAll();
                size = 0;
            }
            //向右旋转90度  
            public function scaleRight(data:Object):void{
                var index: int = arrColl.getItemIndex(data);
                var bmp:Bitmap=data.img as Bitmap;
                var bmd:BitmapData;
                    var rateW:Number=120;
                    var h:Number=100;
                    bmd=new BitmapData(rateW,h,true,0);
                    var m:Matrix =data.img.transform.matrix;
                    var offsetWidth:Number = rateW / 2;
                    var offsetHeight:Number = h / 2;
                    m.translate(-offsetWidth, -offsetHeight);
                    m.rotate(Math.PI / 2);
                    m.translate(+offsetWidth, +offsetHeight);
                    bmd.draw(bmp.bitmapData,m,null,null,null,true);
                    bmp=new Bitmap(bmd,"auto",true);
                    var files:FileReference = data.file;
                    arrColl.setItemAt({img:bmp,file:files},index);
                /**var m:Matrix = new Matrix();  
                
                
                m.rotate(Math.PI/2);  
                
                m.translate(bmp.height,0);  
                
                var bd:BitmapData = new BitmapData(bmp.height, bmp.width);  
                
                bd.draw(bmp,m);  
                return bd;  **/
            }  
            private function showupload(event:MouseEvent):void{
                pl.visible = false;
                panel.visible = true;
                btn_click(event);
            }
            
        ]]>
    </fx:Script>
    <mx:Panel id="pl" layout="vertical"
             horizontalCenter="0"
             verticalCenter="0"
             width="600"
             height="400" headerHeight="0" borderVisible="true" visible="true" horizontalAlign="center" verticalAlign="middle" borderColor="#DCDCDC" >
        <mx:Image source="click.png" buttonMode="true" click="showupload(event)">
        </mx:Image>
        <mx:Text text="请点击添加图片按钮">
            
        </mx:Text>
    </mx:Panel>
    <mx:Panel id="panel"
              layout="vertical"
              horizontalCenter="0"
              verticalCenter="0"
              width="600"
              height="400" headerHeight="0" borderVisible="false" visible="false">
        <s:Group>
            <s:Group>
        <mx:TileList id="tileList" dataProvider="{arrColl}"
                      allowMultipleSelection="true"
                     width="580"
                     height="350"
                     verticalScrollPolicy="off"
                     dragEnabled="false"
                     x="0"
                     y="0" borderColor="#DCDCDC">
            <mx:itemRenderer>
                <fx:Component>
                    <mx:VBox>
                        <s:Group>
                            <!--<mx:LinkButton label="()" accentColor="#cdddf3">   
                            <mx:click>   
                            <![CDATA[    
                            outerDocument.scaleRight(data);    
                            ]]>   
                            </mx:click>   
                            </mx:LinkButton>  -->
                            <mx:Image width="108" height="100" source="{data.img}"/>
                            <s:Group y="82" width="108" height="20">
                                <s:Rect alpha="0.5" width="100%" height="100%" id="reId">
                                    <s:fill>
                                        <s:LinearGradient rotation="250">
                                            <s:GradientEntry color="0x222222" ratio="0"/>
                                            <!--<s:GradientEntry color="0xdddddd" ratio="1"/>-->
                                        </s:LinearGradient>
                                    </s:fill>
                                </s:Rect>
                                    <mx:Text text="删除" width="108" id="butId" mouseChildren="false" buttonMode="true" color="#FEFCFC" >
                                        <mx:click>   
                                            <![CDATA[
                                            outerDocument.removeFile(data);    
                                            ]]>   
                                        </mx:click>
                                    </mx:Text>
                                <!--<mx:LinkButton label="×" accentColor="#cdddf3" visible="false" id="butId" name="butId">   
                                    <mx:click>   
                                        <![CDATA[    
                                        outerDocument.removeFile(data);    
                                        ]]>   
                                    </mx:click>   
                                </mx:LinkButton>  -->
                            </s:Group>
                        </s:Group>
                    </mx:VBox>
                </fx:Component>
            </mx:itemRenderer>
        </mx:TileList>
        </s:Group>
            <s:Group left="0" y="0">
                <s:Group visible="false" width="115" height="110" alpha="0.6" id="masks"  x="0" y="0">
                    <s:Rect alpha="0.5" width="100%" height="100%">
                        <s:fill>
                            <s:LinearGradient rotation="250">
                                <s:GradientEntry color="0x222222" ratio="0"/>
                                <s:GradientEntry color="0xdddddd" ratio="1"/>
                            </s:LinearGradient>
                        </s:fill>
                    </s:Rect>
                </s:Group>
                <mx:Image id="img" x="20" y="40" alpha="0.6" visible="false"/>
            </s:Group>
        </s:Group>
        <mx:HBox width="582" verticalAlign="top" >
            <mx:Label text="共{arrColl.length}张图片,共{size}M" width="70%">
            </mx:Label>
            <s:Group width="60">
                <s:Group>
                    <mx:Image source="addimg.jpg"  click="btn_click(event);" buttonMode="true">
                    </mx:Image>
                </s:Group>
                <s:Group width="62" height="20" alpha="0.6"  x="0" y="0" id="addimg" visible="false">
                    <s:Rect alpha="0.5" width="100%" height="100%" >
                        <s:fill>
                            <s:LinearGradient rotation="250">
                                <s:GradientEntry color="0x222222" ratio="0"/>
                                <s:GradientEntry color="0xdddddd" ratio="1"/>
                            </s:LinearGradient>
                        </s:fill>
                    </s:Rect>
                </s:Group>
            </s:Group>
            <mx:Image source="updata.jpg"  buttonMode="true">
                <mx:click>
                    <![CDATA[  
                    uploadFileOneByOne();  
                    ]]>
                </mx:click>
            </mx:Image>
            <mx:Image source="detall.jpg"  click="RemoveAllFiles(event);" buttonMode="true">
            </mx:Image>
        </mx:HBox>
    </mx:Panel>
</s:Application>
哪位大大知道原因么.......
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值