加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

[AS3]纯AS代码实现可预览本地图片的flash上传客户端

发布时间:2020-12-15 07:01:26 所属栏目:百科 来源:网络整理
导读:[AS3]纯AS代码实现可预览本地图片的flash上传客户端 ???? 需要Flash Player 10+版本的支持,原理就是主要利用fp10中的FileReference.load(),FileReference.data和Loader.loadBytes()三个方法通过图片加载到内存中,来实现预览本地图片,但这个方式不太适用

[AS3]纯AS代码实现可预览本地图片的flash上传客户端

???? 需要Flash Player 10+版本的支持,原理就是主要利用fp10中的FileReference.load(),FileReference.data和Loader.loadBytes()三个方法通过图片加载到内存中,来实现预览本地图片,但这个方式不太适用大图片预览,图片越大内存消耗就越大。



[注意]

1.我这边图片上传路径是无效的,所以图片上传失败是正常的,你们可以改一下上传路径即可;

2.需要Flash Player 10的支持;

3.这次主要研究是预览本地图片功能。


package project.test
{
import flash.display.*;
import flash.geom.Rectangle;
import flash.net.*;
import flash.text.*;
import flash.filters.*;
import flash.events.*;
import flash.system.Security;

import fl.controls.Button;
import fl.controls.ProgressBar;
import fl.controls.ProgressBarMode;

/**
* @link kinglong@gmail.com
* @author Kinglong
* @playerversion fp10
*/
[SWF(width="500",height="300",frameRate="24",backgroundColor="#FFFFFF")]
public class TestUpload extends Sprite {
??
?? private const DEFAULT_UPLOAD_PAGE:String = "http://test.klstudio.com/upload.asp";??
?? private const BOX_WIDTH:uint = 500;
?? private const BOX_HEIGHT:uint = 300;
??
?? private const STATE_CACHE:String = "cache";
?? private const STATE_UPLOAD:String = "upload";
??
?? private var _filters:Array;
?? private var _file:FileReference;
?? private var _loader:Loader;
?? private var _progress:ProgressBar;
?? private var _state:String;
?? private var _buttons:Array;
?? private var _labels:Array;
?? private var _txts:Array;
?? private var _rect:Rectangle;
?? private var _state_txt:TextField;
??
?? public function TestUpload() {
??? Security.allowDomain("*");
???
??? _buttons = [];
??? _txts = [];
??? _labels = ["文件名称:","文件类型:","文件大小:","修改时间:"];
???
??? _rect = new Rectangle(20,80,180,180);
??? _state = STATE_CACHE;
???
??? //背景;
??? this.graphics.beginFill(0x333333);
??? this.graphics.drawRoundRect(0,BOX_WIDTH,BOX_HEIGHT,10,10);
??? this.graphics.endFill();
??? this.graphics.beginFill(0xEFEFEF);
??? this.graphics.drawRoundRect(1,1,BOX_WIDTH - 2,BOX_HEIGHT - 2,10);
??? this.graphics.endFill();
??? this.graphics.beginFill(0x666666);
??? this.graphics.drawRoundRect(10,30,BOX_WIDTH - 20,BOX_HEIGHT - 60,20,20);???
??? this.graphics.endFill();
??? this.graphics.beginFill(0xFEFEFE);
??? this.graphics.drawRoundRect(11,31,BOX_WIDTH - 22,BOX_HEIGHT - 62,20);
??? this.graphics.endFill();
???
??? this.graphics.beginFill(0xCCCCCC);
??? this.graphics.drawRect(11,70,1);
??? this.graphics.endFill();
???
??? this.graphics.beginFill(0x000000);
??? this.graphics.drawRect(_rect.x-1,_rect.y-1,_rect.width+2,_rect.height+2);
??? this.graphics.endFill();???
??? this.graphics.beginFill(0xEEEEEE);
??? this.graphics.drawRect(_rect.x,_rect.y,_rect.width,_rect.height);
??? this.graphics.endFill();
???
???
??? //标题;
??? var label:TextField;???
??? label = getLabel("图片上传(预览图片版) by Kinglong",getTextFormat(0xFFFFFF,14,true));
??? label.x = 10;
??? label.y = 5;
??? label.filters = [getLabelFilter(0x000000)];
??? this.addChild(label);
???
??? for (var i:uint = 0; i < _labels.length; i++ ) {???
???? label = getLabel(_labels[i],getTextFormat(0x333333,12),false,false);????
???? label.x = _rect.right+5;
???? label.y = _rect.y + 25 * i;
???? label.width = 280;
???? label.height = 20;
???? _txts.push(label);
???? this.addChild(label);
??? }???
???
??? _state_txt = getLabel("状态:",12));
??? _state_txt.x = 10;
??? _state_txt.y = BOX_HEIGHT - _state_txt.height - 5;
??? this.addChild(_state_txt);
???
??? //按钮;
??? var button:Button;
??? button = getButton("选择文件",80);???
??? button.move(20,40);
???
??? button = getButton("上传文件",80);???
??? button.move(105,40);
??? button.enabled = false;
???
??? //进度条;
??? _progress = new ProgressBar();
??? _progress.move(190,40);
??? _progress.setSize(290,22);
??? _progress.mode = ProgressBarMode.MANUAL;??????
??? this.addChild(_progress);
???
??? //文件类型;
??? _filters = [];
??? var filter:FileFilter;???
??? filter = new FileFilter("所有支持图片文件(*.jpg,*.jpeg,*.gif,*.png)","*.jpg;*.jpeg;*.gif;*.png");
??? _filters[_filters.length] = filter;
??? filter = new FileFilter("JPEG files(*.jpg,*.jpeg)","*.jpg;*.jpeg");
??? _filters[_filters.length] = filter;
??? filter = new FileFilter("GIF files (*.gif)","*.gif");
??? _filters[_filters.length] = filter;
??? filter = new FileFilter("PNG files(*.png)","*.png");
??? _filters[_filters.length] = filter;
???
??? _file = new FileReference();
??? _file.addEventListener(Event.COMPLETE,fileHandler);
??? _file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,fileHandler);
??? _file.addEventListener(Event.SELECT,fileHandler);
??? _file.addEventListener(Event.OPEN,fileHandler);???
??? _file.addEventListener(ProgressEvent.PROGRESS,fileHandler);
??? _file.addEventListener(SecurityErrorEvent.SECURITY_ERROR,fileHandler);
??? _file.addEventListener(IOErrorEvent.IO_ERROR,fileHandler);
??? _file.addEventListener(HTTPStatusEvent.HTTP_STATUS,fileHandler);
???
??? _loader = new Loader();
??? _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadHandler);
??? this.addChild(_loader);
?? }
??
?? public function get state():String {
??? return _state;
?? }
??
?? private function clickHandler(event:MouseEvent):void {
??? switch(event.target) {
???? case _buttons[0]:
????? _file.browse(_filters);
????? break;
???? case _buttons[1]:
????? _file.upload(new URLRequest(DEFAULT_UPLOAD_PAGE));
????? _state = STATE_UPLOAD;?????
????? _buttons[0].enabled = false;
????? _buttons[1].enabled = false;
????? break;
??? }
?? }
??
?? private function loadHandler(event:Event):void {
??? _loader.scaleX = _loader.scaleY = 1;
??? var w:uint = _loader.width;
??? var h:uint = _loader.height;
??? if (w > _rect.width || h > _rect.height) {????
???? var ip:Number = w / h;
???? var lp:Number = _rect.width / _rect.height;???
???? _loader.width = (ip > lp)?_rect.width:_rect.height*ip;
???? _loader.height = (ip > lp)?_rect.width / ip:_rect.height;
??? }
??? _loader.x = _rect.x + (_rect.width - _loader.width) / 2;
??? _loader.y = _rect.y + (_rect.height - _loader.height) / 2;???
??? _loader.visible = true;
?? }
??
?? private function fileHandler(event:Event):void {
??? switch(event.type) {
???? case Event.COMPLETE:
????? if(state == STATE_CACHE){
?????? _loader.loadBytes(_file.data);
????? }
????? break;
???? case DataEvent.UPLOAD_COMPLETE_DATA:
????? debug("图片上传完成!");
????? _buttons[0].enabled = true;
????? _buttons[1].enabled = false;
????? _progress.setProgress(0,1);
????? break;
???? case Event.SELECT:
????? _txts[0].text = _labels[0] + _file.name;
????? _txts[1].text = _labels[1] + _file.type;
????? _txts[2].text = _labels[2] + ((_file.size > 1024 * 1024)?Math.round(_file.size * 10 / (1024*1024))/10 + "MB":Math.round(_file.size * 10 / 1024)/10 + "KB");?????
????? _txts[3].text = _labels[3] + date2str(_file.modificationDate);
????? _buttons[0].enabled = true;
????? _buttons[1].enabled = true;
????? _file.load();
????? _state = STATE_CACHE;
????? _loader.visible = false;
????? debug("图片已经准备!");
????? break;
???? case Event.OPEN:
????? if(state == STATE_UPLOAD){
?????? debug("正在上传图片...");
????? }
????? break;
???? case ProgressEvent.PROGRESS:
????? if (state == STATE_UPLOAD) {
?????? var pEvent:ProgressEvent = event as ProgressEvent;
?????? _progress.setProgress(pEvent.bytesLoaded,pEvent.bytesTotal);
????? }
????? break;
???? case SecurityErrorEvent.SECURITY_ERROR:
???? case IOErrorEvent.IO_ERROR:
???? case HTTPStatusEvent.HTTP_STATUS:?????
????? if (state == STATE_UPLOAD) {
?????? debug("图片上传失败!");
?????? _buttons[0].enabled = true;
?????? _buttons[1].enabled = true;
????? }else {
?????? debug("图片缓冲失败!");
????? }
????? _progress.setProgress(0,1);
????? break;
????
??? }
?? }
??
?? private function getButton(lbl:String,width:uint=120):Button {
??? var button:Button = new Button();
??? button.label = lbl;
??? button.setSize(width,22);
??? button.setStyle("textFormat",getTextFormat());
??? button.setStyle("disabledTextFormat",getTextFormat(0x999999));
??? button.setStyle("textPadding",4);
??? button.addEventListener(MouseEvent.CLICK,clickHandler);???
??? this.addChild(button);
??? _buttons.push(button);
??? return button;
?? }
??
?? private function getLabel(label:String,format:TextFormat,selectable:Boolean = false,autoSize:Boolean = true):TextField {???
??? var lbl:TextField = new TextField();
??? lbl.selectable = selectable;
??? lbl.defaultTextFormat = format;
??? if(autoSize){
???? lbl.autoSize = TextFieldAutoSize.LEFT;
??? }
??? lbl.text = label;
??? return lbl;
?? }
??
?? private function getTextFormat(color:uint=0x000000,size:uint = 12,bold:Boolean=false):TextFormat {
??? var format:TextFormat = new TextFormat();
??? format.font = "宋体";
??? format.color = color;
??? format.size = size;
??? format.bold = bold;
??? return format;
?? }
??
?? private function getLabelFilter(color:uint=0xFFFFFF):BitmapFilter {
??????????? var alpha:Number = 0.8;
??????????? var blurX:Number = 2;
??????????? var blurY:Number = 2;
??????????? var strength:Number = 3;
??????????? var inner:Boolean = false;
??????????? var knockout:Boolean = false;
??????????? var quality:Number = BitmapFilterQuality.HIGH;

??????????? return new GlowFilter(color,????????????????????????????????? alpha,????????????????????????????????? blurX,????????????????????????????????? blurY,????????????????????????????????? strength,????????????????????????????????? quality,????????????????????????????????? inner,????????????????????????????????? knockout); ?? } ?? ?? private function date2str(day:Date):String { ??? var str:String = day.getFullYear() + "-"; ??? str += num2str(day.getMonth() + 1) + "-"; ??? str += num2str(day.getDate()) + " "; ??? str += num2str(day.getHours()) + ":"; ??? str += num2str(day.getMinutes()) + ":"; ??? str += num2str(day.getSeconds()); ??? return str; ?? } ?? ?? private function num2str(val:Number):String { ??? var str:String = "00" + val; ??? return str.substr(str.length - 2,2);??? ?? } ?? ?? private function debug(message:String):void { ??? _state_txt.text = message; ?? } ?? } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读