flex3配合JS上传照片(服务器不保存上传图片)
Skylin 前段时间因为自己的项目需要上传照片并对照片进行简单的处理,所以使用FLEX制作了一个上传照片的小应用。
这个小应用的特点是FLEX上传图片之后,后台PHP对图片进行处理转换成一种图片格式,然后把图片路径返回给FLEX显示,FLEX显示之后会在请求后台PHP一次删除图片(其实这里做的复杂了一点,可以直接让PHP把图片转换成一种图片格式之后直接把图片数据返回给FLEX,然后删除图片文件的),在flex中对照片进行处理并截取指定图片数据,把图片数据传递给JS,JS在对图片数据进行处理,这样可以进行表单整体提交,来达到不上传对于的图片文件到服务器浪费服务器的空间。
DEMO:http://www.oursit.com/demo/updatepic_demo/
这里我们先来说下这个DEMO的用法,首先我们点击“浏览“,会弹出一个选择窗口,选择我们的图片并上传。这时候上传图片窗口会显示我们上传的图片(这里上传的图片文件就已经删除了),我们可以使用鼠标拖动图片位置和左下角的进度条可以调整图片大小。我们选择好图片在上传图片中显示的样子之后,只要双击上传图片窗口中的图片,就会把我们想要截取的图片显示在右边的保存图片窗口中,下面的文本框中会出现很多数据,其实这些数据就是保存图片窗口中图片的二进制数据。这样我们就可以提交表单来对图片数据进行处理了。
上面只是说明使用方法,可能大家都会觉得这两个窗口不美观而且太小了,因为我自己项目的局限性的问题请大家原谅:)(什么项目?保密)。
下面我就来介绍一下实现方法
如果要用FLEX制作一个我这样的上传照片应用需要使用到
PNGEncoder;URLUtil; PopUpManager;FileReference;BitmapData这几个类
首先我们介绍上传图片
我们点击浏览按钮的时候会调用下面函数
private function onBrowse():void
{
m_browse.addEventListener(Event.SELECT,onSelect); //选择好图片调用的事件
var m_filefilter:FileFilter = new FileFilter(”Images (*.jpg , *gif , *png)”, “*.jpg;*.gif;*.png”); //这里只支持jpg,gif,png图片
m_browse.browse([m_filefilter]);
}
选择好图片然后点击开发的时候会触发 m_browse的Event.SELECT事件,下面请看onSelect函数
private function onSelect(event:Event):void
{
m_browse.removeEventListener(Event.SELECT,onSelect);
m_browse.addEventListener(Event.OPEN,onOpenStart);
m_browse.addEventListener(IOErrorEvent.IO_ERROR,onIOError);
m_browse.addEventListener(ProgressEvent.PROGRESS,onProgress);
m_browse.addEventListener(Event.COMPLETE,onComplete);
m_browse.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,onUploadCompleteData);
var urlrequest:URLRequest;
//Alert.show(URLUtil.getProtocol(Application.application.url));
//下面一块的作用是FLEX在IE和FF调用后台文件的路径不一样,所以这里必须要知道我们要调用的后台PHP文件在哪里,这里的PHP文件和上传图片的SWF文件放在同一目录
if(URLUtil.getProtocol(Application.application.url)==”file”)
{
urlrequest = new URLRequest(”index.php”);
}
else
{
var url:Array = Application.application.url.split(”/”);
url.pop();
//Alert.show(url.join(”/”)+”/index.php”);
urlrequest = new URLRequest(url.join(”/”)+”/index.php”);
}
var variables:URLVariables = new URLVariables();
variables.width = t_img_Picture.width;
variables.height = t_img_Picture.height;
urlrequest.method = URLRequestMethod.POST;
urlrequest.data = variables;
m_browse.upload(urlrequest,”Pic”);
}
这里上传图片完成之后会触发m_browse的DataEvent.UPLOAD_COMPLETE_DATA事件,我们在来看下onUploadCompleteData函数
private function onUploadCompleteData(event:DataEvent):void
{
t_img_Picture.addEventListener(Event.COMPLETE,onPicComplete); //上传图片窗口显示图片之后触发的事件
path = event.data;
t_img_Picture.source = event.data; [...]
Posted in FLEX3 |
1 Comment »