2010-04-07 121 views
0

首先,我在flash/actionscript中很糟糕,它不是我的主要編程語言。Actionscript多個文件上傳,參數傳遞不起作用

我已經創建了我自己的文件上傳Flash應用程序,一直工作到這一點,直到這一點。它使用PHP上傳文件併發回狀態消息,該消息在狀態框中顯示給用戶。

現在我遇到了一種情況,我需要HTML將參數傳遞給Actionscript,然後使用POST傳遞給PHP文件。我試圖設置它,就像adobe在http://livedocs.adobe.com/flex/3/html/help.html?content=17_Networking_and_communications_7.html上沒有成功一樣。

這裏是我的ActionScript代碼

import fl.controls.TextArea; 

//Set filters 
var imageTypes:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg; *.jpeg; *.gif; *.png"); 
var textTypes:FileFilter = new FileFilter("Documents (*.txt, *.rtf, *.pdf, *.doc)", "*.txt; *.rtf; *.pdf; *.doc"); 
var allTypes:Array = new Array(textTypes, imageTypes); 
var fileRefList:FileReferenceList = new FileReferenceList(); 

//Add event listeners for its various fileRefList functions below 
upload_buttn.addEventListener(MouseEvent.CLICK, browseBox); 
fileRefList.addEventListener(Event.SELECT, selectHandler); 


function browseBox(event:MouseEvent):void { 
    fileRefList.browse(allTypes); 
} 

function selectHandler(event:Event):void { 
    var phpRequest:URLRequest = new URLRequest("ajax/upload.ajax.php"); 
    var flashVars:URLVariables = objectToURLVariables(this.root.loaderInfo); 
    phpRequest.method = URLRequestMethod.POST; 
    phpRequest.data = flashVars; 
    var file:FileReference; 
    var files:FileReferenceList = FileReferenceList(event.target); 
    var selectedFileArray:Array = files.fileList; 
    var listener:Object = new Object(); 

    for (var i:uint = 0; i < selectedFileArray.length; i++) { 
     file = FileReference(selectedFileArray[i]); 

     try { 
      file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, phpResponse); 
      file.upload(phpRequest); 
     } 
     catch (error:Error) { 
      status_txt.text = file.name + " Was not uploaded correctly (" + error.message + ")"; 
     } 
} 
} 

function phpResponse(event:DataEvent):void {  
    var file:FileReference = FileReference(event.target); 
    status_txt.htmlText += event.data; 
} 

function objectToURLVariables(parameters:Object):URLVariables { 
    var paramsToSend:URLVariables = new URLVariables(); 
    for(var i:String in parameters) { 
     if(i!=null) { 
      if(parameters[i] is Array) paramsToSend[i] = parameters[i]; 
      else paramsToSend[i] = parameters[i].toString(); 
     } 
} 

    return paramsToSend; 
} 

Flash變量變量是應該包含在HTML文件中的值之一。但是每當我運行程序並輸出PHP文件中的變量時,我都會收到以下內容。

//Using this command on the PHP page 
print_r($_POST); 

//I get this for output 
Array 
(
    [Filename] => testfile.txt 
    [Upload] => Submit Query 
) 

它幾乎像參數越來越寫或根本沒有工作。

感謝您的幫助, 都市報

+0

您是否成功從flashvars接收Flash中的變量?也許在你的Actionscript代碼裏面打印一下? – Abs 2010-04-07 19:59:55

回答

0

好吧,我莫名其妙地解決了該問題.....我不停地變化着的東西來回意識到緩存並沒有在一段時間清零。我清除了緩存,並由於某種原因開始工作。

我的確改變了一條線,回到了之前的樣子。

I changed 
var flashVars:URLVariables = objectToURLVariables(this.root.loaderInfo); 

To 
var flashVars:URLVariables = objectToURLVariables(root.loaderInfo.parameters); 

我不是積極的,這是造成這個問題。可能是因爲我只需要一直清除緩存。無論如何,謝謝你們的幫助。

0

嘗試...

print_r($_FILES); 
0

就像我在我的評論說:你成功地從Flash變數收到Flash中的變量?

我在一段時間內還沒有做Flash,但也許,而不是你的objectToURLVariables函數,直接引用每個變量是一個更好的方法。至少要弄清楚你的HTML頁面是否有這些變量。因此,也許做這樣的事情:

var myVar:String = LoaderInfo(this.root.loaderInfo).parameters.myVar; 
var flashVars:URLVariables = objectToURLVariables(myVar);