santiago1983

学无止境

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

因公司项目需求,在客户端需要用户能够上传图片,为此我又写了一遍这个flash上传的小玩意,其实这个东东我已经写了好几个,但每次写时隔许久,每次写有要回忆(我的记性不好,所以总是记不住细节,好在原理还是忘不了,写写改改就出来了),现在发一遍,大家能用上的就拿去吧。

package  {

import com.adobe.serialization.json.JSON;
import com.flash.external.Delegate;
import com.flash.uploader.utils.Base64;
import com.flash.uploader.utils.JPEGEncoder;

import flash.display.MovieClip;
import flash.net.FileReference;
import flash.display.Loader;
import fl.controls.Button;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.events.MouseEvent;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.FileFilter;
import flash.net.URLRequest;
import flash.display.DisplayObject;
import flash.net.URLLoader;
import flash.net.URLVariables;
import flash.net.URLRequestMethod;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.external.ExternalInterface;
import flash.system.Security;

[SWF(width="216", height="230", frameRate="24", backgroundColor="#FFFFFF")]
public class Main extends MovieClip {

private const UPLOAD_IMAGE_URL:String = "后台接口";
private const MAX_FILE_SIZE_IN_KB:int = 2048;
private const BOX_WIDTH:uint = 216;
private const BOX_HEIGHT:uint = 205;

private var invisible:Sprite;
private var _label:TextField;
private var _format:TextFormat;
private var onLoadBtn:Button;

private var _file:FileReference;
private var _filter:FileFilter;
private var _loader:Loader;
private var _urlRequest:URLRequest;
private var _urlData:URLVariables;
private var _urlLoader:URLLoader;
private var _result:Object;

private var fileSize:Number;

public function Main() {
super();

Security.allowDomain("xxx.com");

//label;
_label = createLabel('Please load your image, press here',25,50,160,200)
this.addChild(_label);

//invisible btn
invisible = new Sprite();
invisible.graphics.beginFill(0x000000,.3);
invisible.graphics.drawRect(1,1,BOX_WIDTH,BOX_HEIGHT);
invisible.graphics.endFill();
this.addChild(invisible);
invisible.addEventListener(MouseEvent.CLICK, clickSelect);

//onLoadBtn
onLoadBtn = createBtn('start uploding',2,207,100,20);
this.addChild(onLoadBtn);
onLoadBtn.enabled = false;

//_filter;
_filter = new FileFilter("Support All Images:(*.jpeg,*.jpg,*.gif,*.png)","*.jpeg;*.jpg;*.gif;*.png");

}

private function clickSelect(event:MouseEvent):void{
_file = new FileReference();
_file.addEventListener(Event.SELECT, onSelect);
_file.browse([_filter]);
}

private function onSelect(event:Event):void{
trace('select');
_file.removeEventListener(Event.SELECT, onSelect);
_file.load();
_file.addEventListener(ProgressEvent.PROGRESS, onProgress);
_file.addEventListener(Event.COMPLETE, onLoadFinish);
}

private function onLoadFinish(event:Event):void{
_file.removeEventListener(Event.COMPLETE, onLoadFinish);
_loader = new Loader();
_loader.loadBytes(_file.data);
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadComplete);

}

private function loadComplete(event:Event):void{

_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, loadComplete);


/* check file size */
fileSize = Math.round(_file.size / 1024);

if(fileSize > MAX_FILE_SIZE_IN_KB){
alertHandler("Your file must be under " +
MAX_FILE_SIZE_IN_KB / 1024 +
"MB and in one of the following formats: *.JPEG,*.JPG,*.GIF,*.PNG");
}
else{
//for better display img in a proper size;
trace(_loader.content.width+'||'+_loader.content.height);
if(_loader.content.width>BOX_WIDTH||_loader.content.height>BOX_HEIGHT){
if(_loader.content.width<_loader.content.height){
_loader.content.width = _loader.content.width *(BOX_HEIGHT/_loader.content.height);
_loader.content.height = BOX_HEIGHT;
}
else if(_loader.content.width>_loader.content.height){
trace("width xiaoyu height")
_loader.content.height = _loader.content.height *(BOX_WIDTH/_loader.content.width);
_loader.content.width = BOX_WIDTH;
}
}

//center position image;
var varX:int = (BOX_WIDTH - _loader.content.width)/2;
var varY:int = (BOX_HEIGHT - _loader.content.height)/2;
_loader.x = varX;
_loader.y = varY;

//empty files
makeHoldEmpty(invisible);
invisible.addChild(_loader);

_label.visible = false;

onLoadBtn.enabled = true;
onLoadBtn.addEventListener(MouseEvent.CLICK, startUpload);
}
trace('name:'+_file.name+'\rtyep:'+_file.type+'\rcreator:'+_file.creator+'\rsize:'+_file.size);

}


private function startUpload(event:MouseEvent):void{
onLoadBtn.removeEventListener(MouseEvent.CLICK, startUpload);

_urlRequest = new URLRequest(UPLOAD_IMAGE_URL);
_urlRequest.method = URLRequestMethod.POST;

_urlData = new URLVariables;
_urlData.base64image = Base64.encode(_file.data);
_urlRequest.data = _urlData;

_urlLoader = new URLLoader()
_urlLoader.addEventListener(Event.COMPLETE, uploadComplete);
_urlLoader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
_urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler);

try{
_urlLoader.load(_urlRequest)
}
catch(event){
errorHandler(null);
}

trace('startUpload');
}

private function uploadComplete(event:Event):void{

_urlLoader.removeEventListener(Event.COMPLETE, uploadComplete);

_result = JSON.decode(event.currentTarget.data);


if (ExternalInterface.available)
{
ExternalInterface.call("uploadFileCallback", _result);//here you can pass some parameters for debuging in browser.
}
}

//error Handler;
private function errorHandler(event:Event){
if (event.currentTarget.hasEventListener(IOErrorEvent.IO_ERROR))
event.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR, errorHandler);
if (event.currentTarget.hasEventListener(SecurityErrorEvent.SECURITY_ERROR))
event.currentTarget.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, errorHandler);


if (ExternalInterface.available)
{
//ExternalInterface.call("uploadFileCallback",{success:false,message:null});
}
}

private function onProgress(event:ProgressEvent){
//具体你想加progress你就自己加吧;
}

private function alertHandler(value):void
{
Delegate.instance().jsAlert(value);
}

//create label
private function createLabel(context:String,posx:int,posy:int,width:int=200,height:int=200):TextField{
var _label:TextField = new TextField();
_label.text = context;
_format = new TextFormat('Arial',14,0x999999);
_label.wordWrap = true;
_label.setTextFormat(_format);
_label.x = posx;
_label.y = posy;
_label.width = width;
_label.height = height;
return _label;
}

//create label
private function createBtn(label:String,posx:int,posy:int,w:int = 50, h:int = 10):Button{
var btn:Button = new Button();
btn.label = label;
btn.width = w;
btn.height = h;
btn.x = posx;
btn.y = posy;
return btn;
}

//check number for uploaded img;
private function makeHoldEmpty(target:Sprite):void{
//remove all history children;
var numChild:int = target.numChildren;
for(var i:int = 0; i<numChild; i++){
target.removeChildAt(i);
trace(i);
}
}

}

}



posted on 2012-03-26 00:58  santiago1983  阅读(1789)  评论(0编辑  收藏  举报