2012-08-29 5 views
1

With이 코드를 사용하면 선택한 파일을 업로드합니다. 문제없이 작동하고 파일을 업로드 한 후 json 또는 string으로 "uploadedFilelist"를 Actionscript로 보내려고합니다. 문제는 내가 어떻게 Actionscript이 데이터를 전달할 수 있습니다 또한 내가 어떻게 ActionScript에서이 데이터를 얻을 수 있는지 모르겠다.ActionScript에서 ASHX의 데이터를 가져 오는 방법

package 
{ 
import flash.external.*; 
import flash.net.FileReferenceList; 
import flash.net.FileReference; 
import flash.display.MovieClip; 
import flash.events.MouseEvent; 
import flash.system.Security; 
import flash.events.Event; 
import flash.events.IOErrorEvent; 
import flash.events.SecurityErrorEvent; 
import flash.net.FileFilter; 
import flash.net.URLRequest; 
import flash.net.URLRequestMethod; 
import flash.net.URLVariables; 

public class MultiSelectClass extends MovieClip 
{ 
    private var fileRefList:FileReferenceList=new FileReferenceList(); 
    private var myRequest:URLRequest; 
    private var serviceUrl:String =""; 
    private var metaData:String=""; 

    function MultiSelectClass() 
    { 
     Security.allowDomain("*"); 

     fileRefList.addEventListener(Event.SELECT,selectHandler); 
     fileRefList.addEventListener(Event.COMPLETE,completeHandler); 
     myButton.addEventListener(MouseEvent.CLICK,myButtonClick); 

     serviceUrl=ExternalInterface.call("MultiFileUploaderFunc.GetServiceUrl"); 
     myRequest = new URLRequest(serviceUrl); 

     metaData = ExternalInterface.call("MultiFileUploaderFunc.GetMetdaData")   
    } 

    function myButtonClick(ev:MouseEvent):void 
    { 
     var swfTypeFilter:FileFilter = new FileFilter("Text Files","*.txt; *.html;*.htm;*.php"); 
     var allTypeFilter:FileFilter = new FileFilter("All Files (*.*)","*.*"); 
     fileRefList.browse([swfTypeFilter,allTypeFilter]); 
    } 

    function selectHandler(e:Event):void 
    { 
     var vars:URLVariables = new URLVariables(); 
     myRequest.method = URLRequestMethod.POST; 

     for each (var file:FileReference in fileRefList.fileList) 
     { 
      file.addEventListener(Event.COMPLETE, completeHandler); 
      file.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
      file.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 

      vars.fileData = file.data; 
      vars.metaData= metaData; 
      myRequest.data = vars; 

      file.upload(myRequest); 
     } 
    } 

    function completeHandler(e:Event):void 
    {      
     ExternalInterface.call("alert","Ok!"); 
    } 

    private function securityErrorHandler(event:SecurityErrorEvent):void 
    { 
     ExternalInterface.call("alert","Security Problem !"); 
    } 

    private function ioErrorHandler(event:IOErrorEvent):void 
    { 
     ExternalInterface.call("alert","I/O Problem !"); 
    } 
} 
} 

일반 처리기 코드 :

public class Handler1 : IHttpHandler 
{ 

public void ProcessRequest(HttpContext context) 
{ 
    if (context.Request.Params["metaData"] == string.Empty) 
    return; 

    var metaData = context.Request.Params["metaData"]; 

    var jss = new JavaScriptSerializer(); 

    var metadataDictionary = jss.Deserialize<dynamic>(metaData); 

    var jsFileType = metadataDictionary["FileType"]; 

    var uploadedFilelist = new List<FileModel>(); 

    foreach (string file in context.Request.Files) 
    { 
    var httpFile = context.Request.Files[file]; 

    if (httpFile.ContentLength == 0) 
     continue; 

    string savedFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Upload\\", Path.GetFileName(httpFile.FileName)); 
    httpFile.SaveAs(savedFileName); 


    var uploadedFile = new FileModel 
    { 
     Extension = System.IO.Path.GetExtension(httpFile.FileName), 
     Id = ID, 
     MimeType = httpFile.ContentType, 
     Name = httpFile.FileName, 
     FileType = jsFileType 
    }; 

    uploadedFilelist.Add(uploadedFile); 
    } 

    context.Response.ContentType = "application/json"; 
    context.Response.Write(jss.Serialize(uploadedFilelist)); 

} 

답변

1

그것은 오히려 간단

액션 스크립트 코드 (즉 AS 나의 전나무 경험이다). 그냥 이벤트 리스너 DataEvent.UPLOAD_COMPLETE_DATA을 추가하고 데이터를 가져옵니다.

fileReference.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, uploadCompleteHandler); 

private function uploadCompleteHandler(event:DataEvent):void { 
    trace(event.data); //response data 
} 
+0

고맙습니다.) –

+0

@peyman gilmour 환영합니다. btw 당신은 대답을 받아 들일 수 있습니다;) –

관련 문제