2009-12-18 61 views
1

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

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

因为我需要进行编码以base64字符串​​3210,我不知道我必须发送给服务器的哪部分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; 
      } 

回答

0

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

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

1

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

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

和它的作品。

+0

好的不客气。很好,你发现你的问题。 – Patrick 2009-12-18 10:44:36