URLSteam读取文本文件可以支持多种编码
URLLoader如果遇到乱码,则可以转换(就像上篇说的利用标准的xml格式Excle可以解决乱码问题就是基于这里):
- var ba:ByteArray = new ByteArray;
- ba.writeBytes((event.target as URLLoader).data);
- ba.position = 0;
- //假如记载的是xml文档
- var xml:XML = XML(ba.readMultiByte(ba.length, "GBK"));
loader用于加载外部的图片文件,SWF文件等。我之前在一个air里面用到它来上载图片,并且要生成一个缩略图,实现代码如下:
- //import的相关
- import mx.events.CloseEvent;
- import flash.geom.Matrix;
- import mx.graphics.codec.JPEGEncoder;
- import mx.graphics.codec.PNGEncoder;
- import mx.controls.Image;
- import mx.controls.Alert;
- import mx.utils.ArrayUtil;
- import mx.collections.ArrayCollection;
- import mx.formatters.NumberFormatter;
- import mx.messaging.AbstractConsumer;
- //压缩小图的相关信息信息
- private var SmallPicSize:int = 80;
- //保存相片的扩展名列表
- private static const EXT_JPEG:String = "jpg";
- private static const EXT_PNG:String = "png";
- public function browseAndUpload():void
- {
- var FileToOpen:File = File.documentsDirectory;
- var txtFilter:FileFilter = new FileFilter("jpg,png","*.jpg;*png;");
- FileToOpen.browseForOpen("Open", [txtFilter]);
- FileToOpen.addEventListener(Event.SELECT,FileToOpenSelected);
- }
- //当上载的相片被打开后,就进行上载操作
- private function FileToOpenSelected(objEvent:Event):void
- {
- var OrgImgPath:String = File(objEvent.currentTarget).nativePath;
- try
- {
- var orgFile:File = new File(OrgImgPath);
- //获取一个随机的图片名称
- var curPicName:String = "TestUploadPic."+orgFile.extension;
- //假如我们把图片的大图片放到项目的/upload/big/文件夹下
- var bigImgFile:File = new File(File.applicationDirectory.nativePath+"/upload/big/"+curPicName);
- orgFile.copyTo(bigImgFile);
- //获取原图的bitmap信息,然后重构一个小图放到temp/small/文件夹下面
- var loader:Loader = new Loader();
- //使用内联函数在事件中传递参数
- var mySpecialObject:Object = {NewImgName:curPicName,NewImgExt:orgFile.extension};
- //注意是loader.contentLoaderInfo
- loader.contentLoaderInfo.addEventListener(Event.COMPLETE,function (e:Event) : void {loadComplete(e,mySpecialObject);});
- loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,loadError);
- //加载原图
- var request:URLRequest = new URLRequest(orgFile.nativePath);
- loader.load(request);
- }
- catch(er:Error)
- {
- Alert.show(er.message);
- }
- }
- //在上载的过程中把原图也load进了内存,主要目的是用原图来生成一个小图,load这个动作完成后的处理方法
- public function loadComplete(event:Event,objSpecial:Object):void
- {
- try
- {
- if(objSpecial != null && objSpecial.NewImgName.toString() != "")
- {
- var loader:Loader = Loader(event.target.loader);
- var BigBitmapdata:BitmapData = Bitmap(loader.contentLoaderInfo.content).bitmapData;
- var myscale:Number = 1.0;
- if(BigBitmapdata.width > 120 || BigBitmapdata.height > 100)
- {
- if(BigBitmapdata.width > BigBitmapdata.height)
- {
- myscale = 120/BigBitmapdata.width;
- }else
- {
- myscale = 100/BigBitmapdata.height;
- }
- }
- //创建新转换矩阵
- var m:Matrix = new Matrix();
- m.scale(myscale,myscale);
- var SmallBitmapdata:BitmapData = new BitmapData(BigBitmapdata.width*myscale,BigBitmapdata.height*myscale,BigBitmapdata.transparent,0xFFFFFFFF);
- SmallBitmapdata.draw(BigBitmapdata,m);
- //相片的Bytearray
- var imgByteArray:ByteArray;
- switch(objSpecial.NewImgExt.toString())
- {
- case EXT_JPEG:
- var jpgenc:JPEGEncoder = new JPEGEncoder(80);
- imgByteArray = jpgenc.encode(SmallBitmapdata);
- break;
- case EXT_PNG:
- var pngenc:PNGEncoder = new PNGEncoder();
- imgByteArray = pngenc.encode(SmallBitmapdata);
- break;
- }
- //假如我们把图片的大图片放到项目的/upload/small/文件夹下
- var smallFile:File = new File(File.applicationDirectory.nativePath+"/upload/small/"+objSpecial.NewImgName.toString());
- var fs:FileStream = new FileStream();
- try{
- fs.open(smallFile,FileMode.WRITE);
- fs.writeBytes(imgByteArray);
- fs.close();
- }catch(e:Error){
- Alert.show(e.message);
- }
- //释放BitmapData所占用的内存(很重要)
- BigBitmapdata.dispose();
- SmallBitmapdata.dispose();
- }
- }
- catch(err:Error)
- {
- Alert.show("生成小图片出错.");
- }
- }
- //当load原图的时候出错的处理方法
- public function loadError(event:IOErrorEvent):void
- {
- Alert.show("上载的图片源:"+Loader(event.target.loader).contentLoaderInfo.loaderURL.toString()+"不存在,无法生成小图");
- }