Нужно использовать HTTPService, а не URLRequest для отправки данных.тип контента возиться с данными? - PullRequest
0 голосов
/ 28 июля 2011

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

var request:URLRequest = new URLRequest ( 'http://www.mydomain.com/upload.php' );
            var loader: URLLoader = new URLLoader();
            request.contentType = 'application/octet-stream';
            request.method = URLRequestMethod.POST;
            request.data = byteArrayOfImage;
            loader.load( request );

и в php

$fp = fopen( 'myImage.jpg', 'wb' );
fwrite( $fp, $GLOBALS[ 'HTTP_RAW_POST_DATA' ] );
fclose( $fp );

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

var service : HTTPService = new HTTPService();
service.method = "POST";
service.contentType = 'application/x-www-form-urlencoded';  
service.url = 'http://www.mydomain.com/upload.php';         
var variables : URLVariables = new URLVariables();      
variables.imageArray = myImageByteArray;
variables.variable2 = "some text string";
variables.variable3 = "some more text";             
service.send( variables );

Затем в php

$byteArray= $_REQUEST["imageArray"];
$fp = fopen( 'myImage.jpg', 'wb' );
fwrite( $fp, $byteArray );
fclose( $fp );

Но это не работает.Размеры сохраняемых файлов различаются, и последний не сохраняет его в виде изображения.Чего мне не хватаетЯвляется ли это тем, что рабочий тип контента является application / octet-stream, а тип контента того, который не работает, является application / x-www-form-urlencoded?

1 Ответ

0 голосов
/ 28 июля 2011

Я нашел похожий вопрос, который дает обходной путь. Не идеально, но работает.

http://www.google.es/search?sourceid=chrome&ie=UTF-8&q=as3+base64+encoder

http://code.google.com/p/jpauclair-blog/source/browse/trunk/Experiment/Base64/src/Base64.as

Итак, я сделал следующее, используя код Base64.

var encodedString : String = Base64.encode( imageByteArray );
var service : HTTPService = new HTTPService();
service.method = "POST";
service.contentType = 'application/x-www-form-urlencoded';  
service.url = 'http://www.mydomain.com/upload.php';         
var variables : URLVariables = new URLVariables();      
variables.imageArray = encodedString;
variables.variable2 = "some text string";
variables.variable3 = "some more text";             
service.send( variables );

затем в сторону php

$byteArray= $_REQUEST["imageArray"];
$byteArray= base64_decode($byteArray);
$fp = fopen( 'myImage.jpg', 'wb' );
fwrite( $fp, $byteArray);
fclose( $fp );

Это сохраняет действительное изображение JPG. Не идеально, но это работает, я все еще хотел бы решение, которое не включает кодирование байтового массива. Поэтому не стесняйтесь отвечать, хотя я нашел этот обходной путь.

...