Как загрузить BitmapData на сервер (ActionScript 3)? - PullRequest
1 голос
/ 13 января 2012

У меня есть bitmapData.Я хочу загрузить его на сервер с помощью URLLoader.Я пробовал много способов, но безрезультатно.Это мой текущий код в ActionScript 3:

import flash.net.URLLoader;
import flash.net.URLRequest;
import mx.graphics.codec.JPEGEncoder;
...
var jpg:JPEGEncoder = new JPEGEncoder();
var myBytes:ByteArray = jpg.encode(bitmapData);
var uploader:URLLoader = new URLLoader();
var request:URLRequest = new URLRequest("uploadFile.php");
request.contentType = "application/octet-stream";
request.data = myBytes;
uploader.load(request);

Я беру объект bitmapData и кодирую его в jpg.После этого я пытаюсь отправить jpg-байты в файл «uploadFile.php» на сервере.Но нет ни ошибок, ни положительного результата.Буду благодарен за любые предложения / советы.

Ответы [ 2 ]

5 голосов
/ 14 января 2012

Это код AS3, который я использовал для этого раньше - это делает запрос POST с двоичными данными в теле запроса:

var url_request:URLRequest = new URLRequest();
url_request.url = "http://server.com/upload.php";
url_request.contentType = "binary/octet-stream";
url_request.method = URLRequestMethod.POST;
url_request.data = myByteArray;
url_request.requestHeaders.push(
 new URLRequestHeader('Cache-Control', 'no-cache'));

var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.BINARY;
// attach complete/error listeners
loader.load(url_request);

Я заметил, что вы не устанавливаете .dataFormat в BINARY или .method в POST.

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

Вам также следует проверить журналы вашего сервера, чтобы увидеть, отправляет ли запрос на сервер. Обратите внимание, что без полностью определенного URL (начинается с http://),, предполагается, что сервер обслуживает ваш PHP-файл из того же расположения, что и SWF-файл.

0 голосов
/ 14 января 2012

Ваша кодировка изображения нарушит его, потому что данные jpg содержат символы не ascii.
Изменение вашего типа contentType на «image / jpeg» должно исправить это, однако это утверждение не проверено.

Когда я отправляю JPG на сервер, я всегда сначала кодирую его base64, а затем декодирую на стороне сервера.

import mx.utils.Base64Encoder;

var b64:Base64Encoder = new Base64Encoder()
b64.encodeBytes( myBytes )
var encodedb64.toString();

request.data = b64.toString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...