Загрузка изображения на сервер с использованием массива байтов для загрузки php в flex 4.5 air

Я использую Flex 4.5 в приложении Mobile air для Android.

Итак, с помощью Camera/Camera roll (http://www.unitedmindset.com/jonbcampos/2010/09/29/air-for-android-camera-and-camera-roll/) я хочу выполнить простую загрузку с помощью amfphp

Примечание. Поскольку именно так вы получаете изображения на устройствах, я не могу использовать filreference, потому что он хочет, чтобы вы получали изображения с помощью «просмотра», что невозможно сделать на Android или ios.

Мой план таков: после того, как я выберу изображение или сделаю снимок с помощью камеры, в случае, если я смогу получить локальный URL-адрес изображения, которое было сделано следующим образом:

file:///mnt/sdcard/DCIM/Camera/IMG_20110531_205113.jpg

Я помещаю это в переменную imageURL

(я предполагаю, что я должен превратить его в массив байтов, чтобы передать его, я не совсем уверен, что это мой первый раз, когда я делаю что-то подобное)

Вот как я беру это изображение, превращаю его в массив байтов и использую amfphp для отправки загрузки на сервер:

protected function upload_btn_clickHandler(event:MouseEvent):void
            {
                var request:URLRequest = new URLRequest(imageURL);
                var urlLoader:URLLoader = new URLLoader(request);

                urlLoader.addEventListener(Event.COMPLETE, onURLLoaderComplete);
                urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
                urlLoader.load(request);

            }

            private function onURLLoaderComplete(event:Event):void
            {
                var byteArray:ByteArray;
                byteArray = event.target.data;

                //send upload using amfphp!
                gw.call("MyClass.uploadFile", uploadImageRes, byteArray);
            }

Вот мой php-код:

function uploadFile($fileData) {
        $myFilePath = '../../../assets/userphotos/imageone';
        preg_replace("/[^0-9]+/","_",microtime()).'_'.$fileData["filename"];
        file_put_contents($myFilePath, $fileData["filedata"]);

        //eventually add the mysql query to add the image path to mysql server

        return true;
       }

Но я получаю сообщение об ошибке NetConnection.Call.BadVersion.

Это первый раз, когда я пытаюсь что-то подобное, поэтому я даже не уверен, правильно ли я это делаю. Все примеры, которые я нахожу в Интернете, связаны с использованием класса fileReference, но это, похоже, требует от меня использования метода «просмотра», и я использую мобильное приложение, которое использует камеру и рулон камеры для захвата изображений с устройства, и я не знаете, как включить это в класс fileref. Я подумал, что могу просто получить массив байтов и отправить его на php самостоятельно, и все должно быть в порядке.

Моя конечная цель - иметь возможность загружать изображение в папку на сервере, и я сделаю обновление mysql, чтобы указать местоположение файла, я пока не очень беспокоюсь о части mysql, я уверен, что часть будет очень легко, и я могу понять это. Я просто хотел получить помощь с фактической загрузкой изображения в каталог. Благодарность!


person brybam    schedule 13.06.2011    source источник


Ответы (1)


По крайней мере, я могу помочь вам с отладкой этого.

NetConnection.Call.BadVersion обычно вызывается в клиенте при возникновении ошибки в php-скрипте. Это заставляет php выводить ошибку, которая, в свою очередь, делает недействительной структуру ответа amf, из-за чего flash не распознает формат amf и выдает ошибку «Плохая версия».

Я рекомендую вам установить программу захвата пакетов (например, wireshark) и посмотреть, что выводит сервер, или, если вы получаете эту ошибку только на мобильном устройстве, проверьте нижнюю часть php-скрипта с помощью error_get_last() и сохраните его в текстовом файле, который вы сможете просмотреть.

Когда вы увидите, какую ошибку выдает php, возможно, вы сможете продвинуться дальше.

person Flassari    schedule 14.06.2011