2009-12-17 3 views
-2

누군가 나를 도울 수 있습니까?플렉스의 여러 다운로드

서버 측에서 업데이트가 발생할 때 다운로드하라는 메시지를 표시하지 않고 서버 측에서 클라이언트 측으로 파일을 다운로드하려고합니다.

지금은 urlstream 클래스를 사용하고 있지만 첫 번째 파일은 부분적으로 완전히 다운로드되는 파일 내용의 나머지 부분 만 다운로드하고 있습니다. 다른 게시물에서 촬영

편집

코드 샘플. 경고 : huuuge chunk o'code입니다.

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:MyComp="client.components.*" layout="absolute" height="554" width="817" 
    backgroundGradientAlphas="[1.0, 0.0]" 
    backgroundGradientColors="[#ABA9A7, #03143B]" creationComplete="init();"> 

<mx:Script> 
<![CDATA[ 
    import flash.system.Capabilities; 
    import mx.collections.XMLListCollection; 
    import mx.rpc.Fault; 
    import mx.rpc.events.ResultEvent; 
    import mx.rpc.events.FaultEvent; 
    import mx.events.ListEvent; 
    import mx.collections.ArrayCollection; 
    import flash.data.SQLConnection; 
    import flash.errors.SQLError; 
    import flash.events.SQLErrorEvent; 
    import flash.events.SQLEvent; 
    import flash.filesystem.File; 
    import flash.errors.SQLError; 
    import mx.controls.Alert; 
    import mx.events.CloseEvent; 
    import flash.net.*; 
    import flash.filesystem.*; 
    import flash.events.OutputProgressEvent; 

    private var urlstring:String="server path"; 
    private var urlReq:URLRequest; 
    private var urlStream:URLStream; 
    private var fileData:ByteArray = new ByteArray(); 
    private var sqlConnection:SQLConnection =null; 
    private var sql:String; 
    private var result:SQLResult; 
    private var stmt:SQLStatement=null; 
    private var catid:int=0; 
    private var testcollection:Array=new Array(); 

    [Bindable] 
    private var DGArray:ArrayCollection = new ArrayCollection(testcollection); 
    private var number:int; 
    private var selection:Boolean=false; 
    private var timestamp:String; 
    private var xmlcol:XMLListCollection; 
    private var categoryid:int=0; 
    private var numbers:int; 
    private var index:int=0; 
    private var findex:int=0; 
    private var nupdates:int=0; 
    private var newfile:String=""; 
    private var selectstream:int=1; 
    private var startdownload:Boolean=false; 

    public function init():void{ 
     userRequest.send(null); 
     sqlConnection= new SQLConnection(); 
     //create a new db-file in the application storage location 
     var file:File = new File("app:/E-catalog.db"); 
     sqlConnection.addEventListener(SQLEvent.OPEN,dbOpenedHandler); 
     sqlConnection.addEventListener(SQLErrorEvent.ERROR,dbErrorHandler); 

     sqlConnection.open(file); 

     getData(); 
    } 

    public function loaded(event:Event):void { 
     urlStream.readBytes(fileData, 0, urlStream.bytesAvailable); 

     for(var x:int=0;x<nupdates;x++){ 
      var filename:Object=xmlcollection.getItemAt(x); 
      newfile=filename['pdfimage']; 
      writeAirFile(); 
     } 

    } 

    public function writeAirFile():void { 
     /* 
     var obj:Object=new Object; 
     startdownload=true; 
     var file:File = File.applicationStorageDirectory.resolvePath(newfile); 
     fileStream = new FileStream(); 

     fileStream.openAsync(file, FileMode.WRITE); 
     fileStream.writeBytes(fileData, 0, fileData.length); 
     fileStream.addEventListener(Event.COMPLETE,progressHandler,true,10,true); 

     for(var x:int=0;x<fileData.length;x++){} 

     startdownload=false; 
     fileStream.close(); 
     */ 
    } 

    public function progressHandler(event:Event){ 
     Alert.show("File downloading"); 
    } 

    public function dbOpenedHandler(event:SQLEvent):void{} 

    public function dbErrorHandler(error:SQLError):void{} 

    public function getData():void{ 
     sql = "SELECT STRFTIME('%Y-%m-%d %H:%M:%S',lupdated_dt)as lupdated_dt FROM update_mas where delflag=0 "; 
     stmt = new SQLStatement(); 
     stmt.sqlConnection = sqlConnection; 

     stmt.text = sql; 

     stmt.addEventListener(SQLEvent.RESULT, selectResult); 
     stmt.addEventListener(SQLErrorEvent.ERROR, selectError); 
     stmt.execute(); 
    } 

    public function selectResult(event:SQLEvent){ 
     DGArray.removeAll(); 
     number=1; 
     var result = stmt.getResult(); 
     var numRows = result.data.length; 

     for (var i = 0; i < numRows; i++){ 
      for(var col:String in result.data[i]){ 
       timestamp=result.data[i][col]; 
      } 
     } 

     updateRequest.url="serverpath ?time="+timestamp+""; 
     updateRequest.send(null); 
    } 

    public function selectError(event):void{ 
     stmt.removeEventListener(SQLEvent.RESULT, selectResult); 
     stmt.removeEventListener(SQLErrorEvent.ERROR, selectError); 
     Alert.show("SELECT error:"); 
    } 

    public function displayPOPUP(event:ResultEvent):void{ 
     nupdates=((int)(event.result)); 
     if(nupdates==0){ 
     }else{ 
      selection=Alert.show(""+nupdates+"Updates available", "UPDATES", Alert.YES|Alert.NO, this, alertClickHandler); 
     } 
    } 

    private function alertClickHandler(event:CloseEvent):void { 
     if (event.detail==Alert.YES){ 
      downloadRequest.url="serverpath ?time="+timestamp; 
      downloadRequest.send(null); 
     }else 
      Alert.show("download cancelled"); 
    } 

    public function displayResult(event:ResultEvent):void{ 
     var record:String=""; 
     sql=""; 
     for(index=0;index<xmlcollection.length;index++){ 
      var category:Object=xmlcollection.getItemAt(index); 
      sql="select Id FROM CATEGORY where delflag=0 and cat_name='"+category['catname']+"'"; 
      stmt = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.addEventListener(SQLEvent.RESULT,checkRecord); 
      stmt.addEventListener(SQLErrorEvent.ERROR,checkError); 
      stmt.execute(); 
     } 
    } 

    public function checkRecord(event:Event):void{ 
     var category:Object=xmlcollection.getItemAt(index); 
     var path:String=""; 
     var result:SQLResult = stmt.getResult(); 
     if(result.data==null){ 
      var sql:String= "INSERT INTO CATEGORY (cat_name, created_user,created_dt,updated_user,updated_dt,image_jpg,image_pdf) "; 
      sql += "VALUES ('"+category['catname']+"',"; 
      sql +="'admin','"+category['cdate']+"','admin','"+category['udate']+"'"+category['pictimage']+"','"+category['pdfimage']+"')"; 
      stmt = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.addEventListener(SQLEvent.RESULT,insertRecord); 
      stmt.addEventListener(SQLErrorEvent.ERROR,insertError); 

      stmt.execute(); 
     }else{ 
      sql=""; 
      sql="update CATEGORY set created_dt='"+category['cdate']+"', updated_dt='"+ category['udate']+"',image_jpg='"+category['pictimage']+"', image_pdf='"+category['pdfimage']+"' where delflag=0 and cat_name='"+category['catname']+"'"; 
      stmt = new SQLStatement(); 
      stmt.sqlConnection = sqlConnection; 
      stmt.text = sql; 
      stmt.addEventListener(SQLEvent.RESULT,updateResult); 
      stmt.addEventListener(SQLErrorEvent.ERROR,updateError); 
      stmt.execute(); 
     } 

     userRequest.send(null); 

     var ludt_dt:Object=xmlcollection.getItemAt((xmlcollection.length-1)); 
     timestamp=""; 
     timestamp=ludt_dt['udate']; 
     sql=""; 
     sql="update update_mas set lupdated_dt='"+timestamp+"' where delflag=0 "; 
     stmt = new SQLStatement(); 
     stmt.sqlConnection = sqlConnection; 
     stmt.text = sql; 
     stmt.addEventListener(SQLEvent.RESULT,updateResult); 
     stmt.addEventListener(SQLErrorEvent.ERROR,updateError); 
     stmt.execute(); 
     var temp:int=0; 
     for(var x:int=0;x<=xmlcollection.length-1;){ 
      var urlstring:String="http://sidssoldc:81/lessons/ravi/"; 
      var url:Object=xmlcollection.getItemAt(x); 
      urlstring+=url['pdfimage']; 
      path=url['pdfimage']; 
      while((path.indexOf('/',0)!=-1)){ 
       path=path.slice(path.indexOf('/',0)+1,path.length); 
      } 

      urlReq=new URLRequest(urlstring); 
      var filename:Object=xmlcollection.getItemAt(x); 
      var loader:URLLoader=new URLLoader(); 
      loader.dataFormat="binary"; 

      selectstream=2; 
      loader.load(urlReq); 

      loader.addEventListener(Event.COMPLETE,function(event:Event){ 
       var loader:URLLoader=(URLLoader)(event.target); 
       loader.dataFormat="binary"; 
       var ofstream2:FileStream= new FileStream(); 
       var ofstream1:FileStream= new FileStream(); 
       var ofstream3:FileStream= new FileStream(); 
       if(selectstream==1){ 
        var ofile1:File = File.applicationStorageDirectory.resolvePath('images/pdf/'+path); 
        ofstream1.openAsync(ofile1, FileMode.WRITE); 
        ofstream1.writeBytes(loader.data, 0, loader.bytesTotal); 
        selectstream++; 
       }else if(selectstream==2){ 
        ofstream1.close(); 
        var ofile2:File = File.applicationStorageDirectory.resolvePath('images/pdf/'+path); 
        ofstream2.openAsync(ofile2, FileMode.WRITE); 
        ofstream2.writeBytes(loader.data, 0, loader.bytesTotal); 
        selectstream++; 
       }else if(selectstream==3){ 
        ofstream2.close(); 
        var ofile3:File = File.applicationStorageDirectory.resolvePath('images/pdf/'+path); 
        ofstream3.openAsync(ofile3, FileMode.WRITE); 
        ofstream3.writeBytes(loader.data, 0, loader.bytesTotal); 
       } 

       if(selectstream==3){ 
        ofstream3.close(); 
       } 
      }); 

      x++; 

      temp=loader.bytesTotal; 

      checkStream.close(); 
     } 

     /*urlStream=new URLStream(); 
     urlStream.addEventListener(Event.COMPLETE, function(event:Event){ 

     urlStream.readBytes(fileData, 0, urlStream.bytesAvailable); 

     for(var x:int=0;x<nupdates;x++){ 
      var filename:Object=xmlcollection.getItemAt(x); 
      newfile=filename['pdfimage']; 
      var obj:Object=new Object; 
      startdownload=true; 
      var file:File = File.applicationStorageDirectory.resolvePath(newfile); 
      var fileStream:FileStream = new FileStream(); 

      fileStream.openAsync(file, FileMode.WRITE); 
      fileStream.writeBytes(fileData, 0, fileData.length); 
      fileStream.addEventListener(Event.COMPLETE,progressHandler,true,10,true); 

      for(var x:int=0;x<fileData.length;x++){ 
       startdownload=false; 
       fileStream.close(); 
      } 
     }); 

     urlStream.load(urlReq); 
     x++;*/ 
    } 

    public function insertRecord(event:Event):void{} 

    public function insertError(event:Event):void{} 

    public function updateResult(event:Event):void{} 

    public function updateError(event:Event):void{ 
     Alert.show("update failed"); 
    } 

    public function checkError(event:Event):void{ 
     Alert.show("error"); 
    } 
    public function showError(event:FaultEvent):void{ 
     Alert.show(""+event.fault); 
    } 

    public function itemClick(event:ListEvent):void{} 
]]> 
</mx:Script> 

<mx:DataGrid id="dgUserRequest" sortableColumns="false" x="99" y="115" width="364" textAlign="left" itemClick="itemClick(event);" rowHeight="30" doubleClickEnabled="false" height="297" themeColor="#ACF4F8" visible="true" editable="false" dataProvider="{catxmlcollection}" color="#000C0E" fontSize="11" > 
    <mx:columns> 
     <mx:DataGridColumn id="ID" headerText="Id" visible="false" dataField="catid" /> 
     <mx:DataGridColumn id="snumber" width="70" headerText="SerialNo" dataField="sno" visible="true" /> 
     <mx:DataGridColumn id="CATEGORY3" width="250" headerText="CATEGORY" dataField="catname" visible="true" /> 
    </mx:columns> 
</mx:DataGrid> 

<mx:XMLListCollection id="catxmlcollection" source="{userRequest.lastResult.categories.category}"/> 

<mx:HTTPService id="userRequest" url="http://192.168.10:81/lessons/ravi/cat.php" fault="showError(event);" useProxy="false" method="GET" resultFormat="e4x" /> 
<mx:HTTPService id="updateRequest" result="displayPOPUP(event);" fault="showError(event);" method="GET" > </mx:HTTPService> 

<mx:XMLListCollection id="xmlcollection" source="{downloadRequest.lastResult.Categories.Category}" /> 

<mx:HTTPService id="downloadRequest" result="displayResult(event);" fault="showError(event);" useProxy="false" method="GET" resultFormat="e4x" ></mx:HTTPService> 
<mx:HTTPService id="categoryRequest"></mx:HTTPService> 

<mx:Label x="216" y="53" text="Category Master" fontWeight="bold" fontSize="12" width="151"/> 

</mx:WindowedApplication> 
+1

아야. 내 귀. 소리 지르지 마. –

+0

코드에서 문제를 해결할 수있는 소스 코드가 필요합니다 ... – Aaron

+0

urlReq = new URLRequest (urlstring); var filename : Object = xmlcollection.getItemAt (x); var loader : URLLoader = new URLLoader(); loader.dataFormat = "binary"; loader.load (urlReq); loader.addEventListener (Event.COMPLETE, function (event : Event)) {var loader : URLLoader = (URLLoader) (event.target); loader.dataFormat = "binary"; var ofstream2 : FileStream = new FileStream ; VAR의 ofstream1 :하여 FileStream = 새로운하여 FileStream(); VAR의 ofstream3 :.하여 FileStream = 새로운하여 FileStream(); 경우 (selectstream == 1) { VAR의 ofile1 : 파일 = File.applicationStorageDirectory에 resolvePath ("이미지/PDF// + 경로); ofstream1.openAsync (ofile1, FileMode.WRITE); –

답변

0

자세한 내용을 입력해야합니다. 심지어 서버에서 데이터를 새로 고칠 지 또는 사용자의 허가없이 파일을 다운로드 할지를 이해할 수 없습니다. 그것이 전자의 경우, 폴링이가는 길입니다. 후자의 경우, 아무도 묻지 않고 다운로드하는 앱을 사용하지 않으므로 상점을 폐쇄 할 수도 있습니다. 동시에 여러 요청을 보낼 때

+0

"자동 업데이트"유형 프롬프트 일 수 있습니다. 또는 "설정하고 잊어 버려!" 파일을 자동으로 다운로드해야하는 타당한 이유가 있지만 사용자가 먼저 묻지 않고 물건을 다운로드하는 앱을 아무도 사용하지 않거나 사용해야하는 것은 맞습니다. 응용 프로그램 구성에서 사용자가 적용한 설정이어야합니다. –

0

내가 몇 가지 문제가 있었다 .P

은 ... 때, 예를 들어, 단지 그들 중 일부가 제대로 수신 된 동시에 스물 개 이미지를로드하려고합니다. 이 문제를 일으키는 것이 확실하지 않지만 모든 문제를 해결 한 이후에 순서대로 이전을 시도해 보시기 바랍니다. 실제로는 배열에 넣을 수 있으며, 이전 배열이 완료되면 항상 맨 위 배열을 제거합니다.