FileReference и HttpService Просмотр изображения Измените его, затем загрузите его

Я пытаюсь сделать загрузчик изображений, пользователь может:
просмотреть локальный файл с помощью button.browse
- выберите один и сохраните его как FileReference.
- затем мы делаем FileReference.load(), а затем привязываем данные к нашему элементу управления изображениями.
- после того, как мы сделаем на нем поворот и изменим данные изображения.
- и чтобы закончить, мы загружаем его на сервер.

Чтобы изменить данные изображения, я получаю матрицу отображаемого изображения и преобразую ее, затем повторно использую новую матрицу и привязываю ее к своему старому изображению:

private function TurnImage():void
{ 
    //Turn it
    var m:Matrix = _img.transform.matrix;
    rotateImage(m);
    _img.transform.matrix = m;
}

Дело в том, что я действительно не знаю, как отправить данные в виде файла на мой сервер, потому что они не хранятся в FileReference, а данные внутри FileReference доступны только для чтения, поэтому мы не можем изменить их или создать новый, поэтому я могу не использовать.upload();.

Затем я попытался HttpService.send, но я не могу понять, как вы отправляете файл, а не MXML.

1 ответ

Вы можете использовать URLLoader для отправки Binary ByteArray на сервер, например:

var urlRequest : URLRequest = new URLRequest();
urlRequest.url = 'path to your server';
urlRequest.contentType = 'multipart/form-data; boundary=' + UploadPostHelper.getBoundary();
urlRequest.method = URLRequestMethod.POST;
urlRequest.data = UploadPostHelper.getPostData( 'image.jpg', byteArray );
urlRequest.requestHeaders.push( new URLRequestHeader( 'Cache-Control', 'no-cache' ) );

// create the image loader & send the image to the server:<br />
var urlLoader : URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
urlLoader.load( urlRequest );

Сначала получите растровые данные для изображения:

// set up a new bitmapdata object that matches the dimensions of the captureContainer;
var bmd : BitmapData = new BitmapData( captureContainer.width, captureContainer.height, true, 0xFFFFFFFF );

// draw the bitmapData from the captureContainer to the bitmapData object:<br />
bmd.draw( captureContainer, new Matrix(), null, null, null, true );

Тогда получите byteArray:

var byteArray : ByteArray = new JPGEncoder( 90 ).encode( bmd );

и используйте приведенный выше код URLLoader для отправки изображения на сервер.

Он будет работать нормально, за исключением того, что вы не получите прогресс загрузки файла, подобный тому, который вы получаете из FileReference.upload. Если вы можете заставить процесс загрузки работать с помощью URLLoader, пожалуйста, оставьте свой ответ здесь.

Другие вопросы по тегам