最近研究一个功能:用as3写的上传图片并实现预览。觉得花了很多时间也学到很多知识,将自己的所得记录下来供大家分享。

  首先是预览功能的实现,大家自然而然就想到了loader来加载图片并显示,由于项目没有对图片大小进行限制,所以加载的时候会非常慢。场景:如果同时加载100张5M以上的图片,内存可能会升到1000M以上,导致机器卡死。

  解决方案:

1.不要同时加载100张图片,一张加载完再加载下一张。        这个是参照网易相册的上传功能,qq空间的上传功能来源于插件,qq相册也是flash写的,仍存在很卡的问题

2.如果需要多个loader来加载,图片就需要用bitmap显示出来,并将loader释放掉内存,方式是:

(loader.contentLoaderInfo.content as Bitmap).bitmapData.dispose();//从内存中删除原图的bitmapData引用
 loader.unload();    loader = null;//将loader置为空

当然,用一个loader更好,直接通过loader控制大小显示成缩略图,也不用释放掉

3.用filereference打开本地图片,记得在加载完图片释放掉filereference数据,方式是:

filereference.data.clear();//不清除,内存会一直很高

4.当加载的图片很多,会想到用scrollpane,但是一方面滚动条不美观,另一方面会碰到一些浏览器兼容问题,像有的浏览器的滚动事件会失效,我的处理方式是自己重写滚动条,通过遮罩控制显示区域,并用js监听滚轮事件,可以参照 http://www.cnblogs.com/meteoric_cry/archive/2013/01/06/2848221.html

  然后是上传功能的问题,首先了解上传的3中方式,参照http://blog.csdn.net/txiejun/article/details/6934107因为是压缩上传,我们想到了用urlLoader进行二进制上传,关键问题是urlLoader无法监听上传进度事件,解决方案来源于http://stackoverflow.com/questions/9559948/post-file-upload-using-urlrequest,利用filereference来上传二进制,根据文章和实践发现,上传时仍然会报错,于是我们把上传的二进制转化成字符串就没问题了,压缩是通过jpgEncoder进行的,因为效率比较低,显示压缩进度会给用户更好的体验。

(上传功能这一块,出现误区,就是用filereference上传二进制的方式,虽然实现了二进制的上传,实际却把原图一起上传了,这样很占带宽,仍在找方案)

  经验总结:关注内存,关注用户体验

  

压缩上传并预览 flash的更多相关文章

  1. vue开发中vue-resource + canvas 图片压缩、上传、预览

    1.使用vue-resource上传,也可以自定义ajax上传: 2.使用<input type="file" @change="submit()" na ...

  2. Jcrop+uploadify+php实现上传头像预览裁剪

    最近由于项目需要,所以做了一个上传头像预览并且可以预览裁剪的功能,大概思路是上传的图片先保存到服务器,然后通过ajax从服务器获取到图片信息,再利用Jcrop插件进行裁剪,之后通过PHP获取到的四个裁 ...

  3. input file实现多选,限制文件上传类型,图片上传前预览功能

    限制上传类型 & 多选:① accept 属性只能与 <input type="file" /> 配合使用.它规定能够通过文件上传进行提交的文件类型. ② mu ...

  4. servlet实现文件上传,预览,下载和删除

      一.准备工作 1.1 文件上传插件:uploadify: 1.2 文件上传所需jar包:commons-fileupload-1.3.1.jar和commons-io-2.2.jar 1.3 将数 ...

  5. 小程序实现图片上传,预览以及图片base64位处理

    最近一段时间在做小程序项目,第一期功也完工了.需要好好总结一下经验,把项目中遇到的问题好好总结一下,遇到的问题,踩过的坑.今天写一个小程序实现图片上传,预览,以及删除,图片base64位处理.下面就是 ...

  6. hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images

    hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images, 本例子主要是使用HTML5 的File API,建立一個可存取到该file的url, 一个空的img标签,ID为img0,把 ...

  7. html之file标签 --- 图片上传前预览 -- FileReader

    记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<input type="file"/>标签一直实现不了,最后舍弃了这个标签,使用了 ...

  8. 【转】HTML5 jQuery图片上传前预览

    hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images,本例子主要是使用HTML5 的File API,建立一個可存取到该 file的url,一个空的img标签,ID为img0,把选 ...

  9. ASP.NET MVC图片上传前预览

    回老家过春节,大半个月,在家的日子里,吃好睡好,人也长了3.5Kg.没有电脑,没有网络,无需写代码,工作上相关的完全放下......开心与父母妻儿过个年,那样的生活令Insus.NET现在还在留恋.. ...

随机推荐

  1. css 默认

    先写全局的样式 body { margin:0 auto; font-size:12px; font-family:Verdana; line-height:1.5;} ul,dl,dd,h1,h2, ...

  2. uboot 环境变量

    从bootm 命令讲起 1 找到linux的内核入口 Bootm命令通过读取uImage的头部0×40字节的信息,将uImage定位到正确的地址,同时找到linux的内核入口地址. 这个地方就涉及到u ...

  3. angularjs中ng-route和ui-router简单用法的代码比较

    1.使用ng-route: app.js中的写法: var app=angular.module('birthdayApp',['ngRoute']); app.config(function($ro ...

  4. 技巧分享——如何去除多余的CSS代码?

    有时候,当你的CSS代码过多的时候,而且已经明确知道有部分CSS代码是多余的: 这时候,有什么较快的办法可以去除多余的CSS呢?? 下面分享一个实用技巧: 1.使用谷歌浏览器:Chrome .下载 2 ...

  5. javaweb工程,Servlet里面获取当前WEB跟路径的文件绝对路径地址

    String base_Url = request.getSession().getServletContext().getRealPath("/"); String window ...

  6. 在编译oc中protocol时出现的错误

    Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang ...

  7. XML封装与验证消息

    Document document = DocumentHelper.createDocument(); document.setXMLEncoding(ChARSET_UTF_8); Element ...

  8. Hbase的安装(hadoop-2.6.0,hbase1.0)

    Hbase的安装相对很简单啊...只要你装了Hadoop 装Hbase就是分分钟的事 如果要装hadoop集群的话 hadoop分类的集群安装好了,如果已经装好单机版~ 那就再配置如下就好~ 一.vi ...

  9. DBA_Oracle基本体系内存和进程结构(概念)

    2014-08-05 Created By BaoXinjian

  10. REST总结(转)

    REST总结           REST(Representational State Transfer)是代表状态传输的缩写,它代表了分布式超媒体系统的体系结构风格,它是一种针对网络应用的设计和开 ...