Flash Loader и ByteArray - PullRequest
       33

Flash Loader и ByteArray

1 голос
/ 18 декабря 2009

Мне нужно иметь возможность загружать изображение jpeg / png с диска, показывать его в формате flex и отправлять на сервер в виде строки в кодировке base64. Но после загрузки файла изображения в моем объекте flash.display.LoaderInfo свойство bytes (тип ByteArray) содержит больше байтов, чем содержимое файла.

Пример: размер файла изображения: 3089 flash.display.LoaderInfo.bytesTotal: 3089 flash.display.LoaderInfo.bytes.length: 3155

Поскольку мне нужно закодировать строку flash.display.LoaderInfo.bytes в base64, я не знаю, какую часть объекта ByteArray я должен отправить на сервер. Я не хочу рисовать содержимое bytearray в растровое изображение и перекодировать его как jpg, потому что я должен сохранить исходное качество файла.

Спасибо

некоторый код:

private function onDataLoadComplete(event:Event):void {
                var encoder:Base64Encoder = new Base64Encoder();
                //var imagePartBytes:ByteArray = new ByteArray();
                //imagePartBytes.writeBytes(event.target.bytes, 0, event.target.bytesTotal); 
                //imagePartBytes.writeBytes(event.target.bytes, 0, event.target.bytes.length); 
                //imagePartBytes.writeBytes(event.target.bytes, event.target.bytes.length-event.target.bytesTotal, event.target.bytesTotal); 
                encoder.encodeBytes(event.target.bytes);
                var imagePart:String = encoder.flush();
                trace(imagePart);
                data = fileName+";"+event.target.contentType+";"+imagePart;
                _changed = true;
            }

Ответы [ 2 ]

1 голос
/ 18 декабря 2009

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

var encoder:Base64Encoder = new Base64Encoder();
encoder.encodeBytes(fileRef.data);
imagePart = encoder.flush();

и все работает.

0 голосов
/ 18 декабря 2009

Обычно вы должны отправить все содержимое байта. Как вы загружаете изображение, вы уверены, что получаете данные в двоичном виде? Если вы отображаете загруженное изображение, есть ли проблема?

Если вы кодируете данные с помощью base64, результирующая длина данных будет больше, чем исходная, поскольку вы перекодируете 8-битные данные длиной в 6 бит. Таким образом, для одного байта он уместится в 2 байта.

...