2010-04-07 125 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);