Actionscript多文件上传,参数传递不起作用

时间:2010-04-07 18:49:11

标签: php actionscript-3 upload

首先,我在flash / 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;
}

flashVars变量应该包含HTML文件中的值。但每当我运行程序并在PHP文件中输出变量时,我都会收到以下内容。

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

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

它几乎就像参数越来越多,或根本就没有工作。

感谢您的帮助, 大都市

3 个答案:

答案 0 :(得分:0)

...试

print_r($_FILES);

答案 1 :(得分:0)

就像我在评论中所说:你是否从闪存中成功接收Flash中的变量?

我有一段时间没有完成Flash,但也许,而不是你的objectToURLVariables函数,只是直接引用每个变量是一种更好的方法。至少要弄清楚你的HTML页面中是否有这些变量。所以也许做这样的事情:

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

答案 2 :(得分:0)

好的,我已经以某种方式修复了这个问题.....我不停地来回改变事物,并意识到缓存还没有被清除一段时间。我清除了缓存,它开始工作了一些原因。

我确实将一行更改回我以前的方式。

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

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

我不肯定这导致了这个问题。可能一直是我需要一直清除缓存。无论如何,谢谢你的帮助。