Actionscript 3 — Как отправить байтовый массив с изображением из AS3 в PHP?

Я должен из приложения AS3 AIR отправить изображение, помимо остальных параметров POST, в PHP-скрипт, который сделает все остальное. Я хочу как-то преобразовать байтовый массив с изображением в строку и кодировать его с помощью base64. Я был успешным, но данные изображения неверны.

Вот код, который я использовал для его преобразования:

...
//BA1 is Byte Array with an image in it
var data:String = BA1.toString();
OutSql.push({t: "b1", v: Base64.encode(data)});
...

Все работает нормально, эти данные отправляются на сервер, декодируются и сохраняются в виде изображения, но изображение неверно. Почему-то это около 40 кб, а когда я сохраняю его в приложении Air, это 22 кб. Есть идеи?

постскриптум Я знаю, что могу сохранить его локально и загрузить, но мне действительно нужно сделать это таким образом. Кроме того, BA1.readUTF () генерирует ошибку, поэтому не вариант.

прибавление:

На стороне сервера я пытался выполнить строку utf8_decode перед записью в файл, и каким-то образом я получил изображение, которое имеет правильные размеры, но … это изображение не то, чем я хотел быть, оно похоже на каракули …

0

Решение

import com.sociodox.utils.Base64;
.....
//BA1 is ByteArray with an image encoded
var enc_image=Base64.encode(BA1);
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.TEXT;
var request:URLRequest = new URLRequest("some.php");
var variables:URLVariables = new URLVariables();
variables.decode("image="+enc_image);
request.method = URLRequestMethod.POST;
request.data = variables;
loader.load(request);

конечно, поставьте своих слушателей тоже …

в «some.php»:

$imageData = base64_decode(str_replace(" ", "+", $_POST['image']));
$fh = fopen("path/to/image/somename.jpg", "wb");
fwrite($fh, $imageData);
fclose($fh);

Это работает как шарм 🙂

3

Другие решения

Soultion найден. Я скачал с http://www.sociodox.com/base64.html Base64.swc, который фактически кодирует и декодирует байтовые массивы изображений. И поскольку моя строка была в формате JSON (как часть объекта, отправленного в PHP), мне оставалось только преобразовать пробелы в ‘+’, декодировать и записать в файл — работает отлично! Дело закрыто.

1