Загрузка изображения на сервер с использованием байтового массива для загрузки php в flex 4.5 air - PullRequest
1 голос
/ 13 июня 2011

Я использую 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 var

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

Вот как я беру это изображение, превращаю его в байтовый массив и использую 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, но, похоже, для этого мне нужно использовать метод "browse", и я работаю в мобильном приложении, которое использует камеру и рулон камеры для захвата изображений с устройства, и я неуверен, как включить это в класс fileref.Я подумал, что могу просто получить байтовый массив и отправить его php самому, и все должно быть в порядке.

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

1 Ответ

0 голосов
/ 14 июня 2011

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

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

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

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

...