Actionscript для загрузки нескольких файлов с передачей параметров не работает - PullRequest
0 голосов
/ 07 апреля 2010

Во-первых, я очень плохо разбираюсь в flash / actionscript, это не мой основной язык программирования.

Я создал свое собственное приложение для загрузки файлов, которое прекрасно работало до этого момента. Он использует PHP для загрузки файлов и отправляет обратно сообщение о состоянии, которое отображается в окне состояния для пользователя.

Теперь я столкнулся с ситуацией, когда мне нужен HTML для передачи параметра в ActionScript, а затем в файл PHP с помощью POST. Я попытался установить это так же, как 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
)

Это почти как параметры перезаписываются или просто не работают вообще.

Спасибо за любую помощь, Metropolis

Ответы [ 3 ]

0 голосов
/ 08 апреля 2010

Как я уже сказал в своем комментарии: вы успешно получаете переменную во Flash из flashvars?

Я давно не делал Flash, но, возможно, вместо вашей функции objectToURLVariables лучше просто ссылаться на каждую переменную напрямую. По крайней мере, выяснить, есть ли у вас эти переменные на вашей HTML-странице. Поэтому, возможно, сделайте что-то вроде этого:

var myVar:String = LoaderInfo(this.root.loaderInfo).parameters.myVar;
var flashVars:URLVariables = objectToURLVariables(myVar);
0 голосов
/ 08 апреля 2010

Хорошо, я как-то исправил проблему ..... Я продолжал менять вещи назад и вперед и понял, что кэш не был очищен некоторое время.Я очистил кеш, и он начал работать по какой-то причине.

Я изменил одну строку на прежнюю.

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

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

Я не уверен, что это стало причиной проблемы.Возможно, мне просто нужно было все время очищать кеш.В любом случае, спасибо за вашу помощь, ребята.

0 голосов
/ 08 апреля 2010

Try ...

print_r($_FILES);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...