1

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

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

由于我需要对flash.display.LoaderInfo.bytesin base64 字符串进行编码,我不知道我必须将 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;
            }
4

2 回答 2

1

帕特里克感谢您的回复。我找到了解决方案。我使用 FileReference 将图像直接加载到 Flash 播放器,而不是使用 Loader 将图像加载到舞台。我试图对加载程序的 ByteArray 进行编码,而不是 FileReference.data,它是一个 ByteArray,我需要的 :)

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

它有效。

于 2009-12-18T09:49:34.503 回答
0

通常你应该发送字节数组的所有内容。你是如何加载图像的,你确定你接收的是二进制形式的数据吗?如果显示加载的图像有什么问题吗?

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

于 2009-12-18T09:34:11.757 回答