现在相片比较大,好几M,直接上传比较麻烦
package {
import com.adobe.images.JPGEncoder;
import com.adobe.images.PNGEncoder;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.MouseEvent;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.utils.ByteArray;
import flash.display.MovieClip;
import fl.controls.Button;
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;
import fl.controls.Label;
import flash.external.ExternalInterface;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.net.FileReferenceList;
import flash.events.*;
import flash.net.navigateToURL;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.events.Event;
import flash.net.URLLoader;
import flash.net.*;
public class upload extends MovieClip {
private var fileUpload:FileReferenceList = new FileReferenceList();
private var serverUrl:String = 'upload.php';
private var imgWidth:Number = 980;
private var imgHeight:Number = 650;
private var imgQuality:Number = 80;
private var imgtype:Number = 0;
private var jsFunction:String = '';
private var sessionid:String = '';
private var uploadid:String = '';
private var upfile:Array=new Array();
private var btnname:String = "选择上传图片";
private var infobar:Label = new Label();
public function upload() {
// constructor code
trace("hello word!");
var parameters:Object= root.loaderInfo.parameters;
if(parameters != null)
{
if(parameters["serverUrl"] != null)
{
serverUrl = String(parameters["serverUrl"]);
}
if(parameters["imgWidth"] != null)
{
imgWidth = Number(parameters["imgWidth"]);
}
if(parameters["imgHeight"] != null)
{
imgHeight = Number(parameters["imgHeight"]);
}
if(parameters["imgQuality"] != null)
{
imgQuality = Number(parameters["imgQuality"]);
}
if(parameters["jsFunction"] != null)
{
jsFunction = String(parameters["jsFunction"]);
}
if(parameters["uploadid"] != null)
{
uploadid = String(parameters["uploadid"]);
}
if(parameters["btnText"] != null)
{
btnname = String(parameters["btnText"]);
}
if(parameters["sessionid"] != null)
{
sessionid = String(parameters["sessionid"]);
}
if(parameters["imgtype"] != null)
{
imgtype = Number(parameters["imgtype"]);
}
}
var myButton:Button = new Button();
myButton.label = btnname;
myButton.width = 100;
myButton.height = 30;
myButton.move(10,10);
var t1:TextFormat=new TextFormat();
t1.bold=true;
t1.size=14;
myButton.setStyle("textFormat",t1);
this.addChild(myButton);
infobar.width=200;
infobar.height = 30;
infobar.move(10,45);
infobar.text="请选择图片,可以多选!";
this.addChild(infobar);
//点击事件,选择图片
myButton.addEventListener(MouseEvent.CLICK,buttonClick);
fileUpload.addEventListener(Event.SELECT, selectHandler);
fileUpload.addEventListener(Event.COMPLETE, loadImageComplete);
fileUpload.addEventListener(IOErrorEvent.IO_ERROR, function(evt:IOErrorEvent):void{
infobar.text="加载图片失败!错误信息:" + evt.text;
});
fileUpload.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function(evt:SecurityErrorEvent):void{
infobar.text="加载图片失败!错误信息:" + evt.text;
});
}
private function selectHandler(e:Event):void {
//处理选择图片
infobar.text="选择了"+ e.target.fileList.length +"个图片。";
upfile=new Array();
var file:FileReference;
for (var i:uint = 0; i < e.target.fileList.length; i++) {
file = FileReference(e.target.fileList[i]);
file.addEventListener(Event.COMPLETE, loadImageComplete);
file.addEventListener(IOErrorEvent.IO_ERROR, function(evt:IOErrorEvent):void{
infobar.text="读入图片失败!错误信息:" + evt.text;
});
file.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function(evt:SecurityErrorEvent):void{
infobar.text="读入图片失败!错误信息:" + evt.text;
});
//加载图片到内存
file.load();
//保存起来
upfile.push(file);
}
}
private function loadImageComplete(evt:Event):void
{
trace('abb'+evt.target.name);
//完成加载图片
infobar.text="读取完"+ evt.target.name +"图片,正在处理中。。。";
var objname:String=String(evt.target.name);
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (event:Event):void
{
var loaderInfo:LoaderInfo = (event.target as LoaderInfo);
var bitmap:Bitmap = Bitmap(loaderInfo.content);
var _imageContainer = new Sprite();
_imageContainer.addChild(bitmap);
//this.addChild(_imageContainer);
var xsize:Number;
var ysize:Number;
var rsize:Number=1;
var asize:Number;
var bsize:Number;
var nw:Boolean=false;
var nh:Boolean=false;
var imageData:BitmapData;
var shiftOrigin:Matrix;
trace("width:"+bitmap.width+"height:"+bitmap.height);
if(imgtype==2){
//最大边对齐
if(bitmap.width > imgWidth || bitmap.height > imgHeight)
{
if(bitmap.width > bitmap.height){
asize=imgWidth / bitmap.width;
nw=true;
}
if(bitmap.height > bitmap.width){
bsize=imgHeight / bitmap.height;
nh=true;
}
if(nw && nh)
{
if(asize < bsize)
{
rsize = asize;
}else{
rsize = bsize;
}
}else if(nw)
{
rsize = asize;
}else if(nh)
{
rsize = bsize;
}
}
ysize = Math.ceil(bitmap.height*rsize);
xsize = Math.ceil(bitmap.width*rsize);
asize=0;
bsize=0;
if(ysize>imgHeight){
bsize=Math.round((ysize-imgHeight)/2);
ysize=imgHeight;
}
if(asize>imgWidth){
asize=Math.round((asize-imgWidth)/2);
xsize =imgWidth;
}
imageData= new BitmapData(xsize,ysize);
shiftOrigin= new Matrix();
shiftOrigin.scale(rsize,rsize);
shiftOrigin.translate(-asize,-bsize);
}else if(imgtype==1){
//缩放到固定大小
if(bitmap.width > imgWidth || bitmap.height > imgHeight)
{
if(bitmap.width > imgWidth){
asize=imgWidth / bitmap.width;
nw=true;
}
if(bitmap.height > imgHeight){
bsize=imgHeight / bitmap.height;
nh=true;
}
if(nw && nh)
{
if(asize < bsize)
{
rsize = bsize;
}else{
rsize = asize;
}
}else if(nw)
{
rsize = asize;
}else if(nh)
{
rsize = bsize;
}
}
trace(rsize+":r");
asize=Math.round(((bitmap.width*rsize)-imgWidth)/2);
bsize=Math.round(((bitmap.height*rsize)-imgHeight)/2);
if(imgWidth>bitmap.width){
xsize = bitmap.width;
asize=0;
}else{
xsize = imgWidth;
}
if(imgHeight>bitmap.height){
ysize = bitmap.height;
bsize=0;
}else{
ysize = imgHeight;
}
imageData= new BitmapData(xsize,ysize);
shiftOrigin= new Matrix();
shiftOrigin.scale(rsize,rsize);
shiftOrigin.translate(-asize,-bsize);
}else{
//默认不大于
if(bitmap.width > imgWidth || bitmap.height > imgHeight)
{
if(bitmap.width > imgWidth){
asize=imgWidth / bitmap.width;
nw=true;
}
if(bitmap.height > imgHeight){
bsize=imgHeight / bitmap.height;
nh=true;
}
if(nw && nh)
{
if(asize < bsize)
{
rsize = asize;
}else{
rsize = bsize;
}
}else if(nw)
{
rsize = asize;
}else if(nh)
{
rsize = bsize;
}
}
trace(rsize+":r");
ysize = Math.round(bitmap.height*rsize);
xsize = Math.round(bitmap.width*rsize);
imageData= new BitmapData(xsize,ysize);
shiftOrigin= new Matrix();
shiftOrigin.scale(rsize,rsize);
trace(xsize+" "+ysize);
}
imageData.draw(_imageContainer, shiftOrigin);
var encodedImage:ByteArray;
var jpgEncoder:JPGEncoder = new JPGEncoder(80);
encodedImage = jpgEncoder.encode(imageData);
//释放
imageData.dispose();
infobar.text="编码完成,正在上传"+ objname +"图片";
var req:URLRequest = new URLRequest(serverUrl+"?sessionid="+sessionid+"&filename="+encodeURIComponent(objname));
req.contentType = 'applicatoin/octet-stream';
req.method = URLRequestMethod.POST;
/*
var variables:URLVariables = new URLVariables();
variables.filename=encodeURIComponent(objname);
variables.filedata=encodedImage;
variables.width=imageData.width.toString();
variables.height=imageData.height.toString();
var arrHead:Array = new Array();
arrHead.push(new URLRequestHeader("fileName", encodeURIComponent(objname)));
arrHead.push(new URLRequestHeader("width", imageData.width.toString()));
arrHead.push(new URLRequestHeader("height", imageData.height.toString()));
req.requestHeaders = arrHead;
*/
req.data = encodedImage;
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, uploadComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR, function(evt:IOErrorEvent):void{
trace("上传图片失败!错误信息:" + evt.text);
infobar.text="上传图片io错误:" + evt.text;
});
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function(evt:SecurityErrorEvent):void{
trace("上传图片失败!错误信息:" + evt.text);
infobar.text="上传图片安全错误:" + evt.text;
});
try
{
infobar.text="正在上传"+ objname +"图片";
loader.load(req);
}
catch (error:Error)
{
trace("上传失败!" + error.message);
infobar.text="上传失败:" + error.message;
}
});
loader.loadBytes(evt.target.data);
}
private function showError(str:String):void
{
callJs('error', str);
infobar.text=str;
}
private function uploadComplete(evt:Event):void{
callJs('complete', evt.target.data);
infobar.text="上传完成:"+ evt.target.data;
//调用输入框的id
if(uploadid!= null)
{
callJs('uploadid', evt.target.data);
}
}
private function callJs(type:String, str:String):void
{
if(jsFunction == '')
{
return;
}
try
{
if(ExternalInterface.available)
{
ExternalInterface.call(jsFunction, type, str);
}
}
catch(err:Error)
{}
}
private function buttonClick(e:MouseEvent) {
var fileFilter:FileFilter = new FileFilter("图片", "*.jpg;*.gif;*.jpeg;");
fileUpload.browse([fileFilter]);
}
}
}