Flash Loader和ByteArray

时间:2009-12-18 09:15:43

标签: flash bytearray jpeg base64 loader

我需要能够从磁盘加载jpeg / png图像并在flex中显示它并将其作为base64编码的字符串发送到服务器。但是一旦加载了图像文件,在我的flash.display.LoaderInfo对象中,bytes属性(ByteArray的类型)包含的字节多于文件内容。

实施例: 图像文件大小:3089 flash.display.LoaderInfo.bytesTotal:3089 flash.display.LoaderInfo.bytes.length:3155

由于我需要对base64字符串中的flash.display.LoaderInfo.bytes进行编码,我不知道必须将哪个ByteArray对象发送到服务器。 我不想将bytearray内容绘制到Bitmap图像中并将其重新编码为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 个答案:

答案 0 :(得分:1)

帕特里克谢谢你的回复。 我找到了解决方案。 我使用FileReference将图像直接加载到Flash播放器,而不是使用Loader将图像加载到舞台上。我试图编译Loader的ByteArray而不是FileReference.data,这是一个ByteArray,我需要的那个:)

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

它有效。

答案 1 :(得分:0)

通常你应该发送bytearray的所有内容。 如何加载图像,您确定要以二进制形式接收数据吗? 如果显示加载的图像有问题吗?

如果使用base64对数据进行编码,则由于您使用6位重新编码8位长数据,因此生成的数据长度将大于原始数据。所以对于一个字节,它将适合2个字节。

相关问题