[ActionScript3.0] 使用FileReference处理单个文件的上载
package
{
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.errors.IllegalOperationError;
import flash.errors.MemoryError;
import flash.events.DataEvent;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.ProgressEvent;
import flash.net.FileFilter;
import flash.net.FileReference;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
/**
* ...
* @author Frost.Yen
*/
public class UploadAS3 extends Sprite
{
private var _label:TextField;
private var _button:TextField;
private var _fileRefer:FileReference;
private var _request:URLRequest = new URLRequest("http://localhost/yanzimen/");
public function UploadAS3()
{
if(stage) init();
else addEventListener(Event.ADDED_TO_STAGE,init);
}
private function init(e:Event = null):void
{
_label = new TextField();
_label.text = "please select file";
_label.autoSize = TextFieldAutoSize.LEFT;
_label.background = true;
_label.width = 300;
_label.wordWrap = true;
_label.backgroundColor = 0xffffff;
_label.border = true;
_button = new TextField();
_button.text = "click here to select file";
_button.autoSize = TextFieldAutoSize.LEFT;
_button.selectable = false;
_button.background = true;
_button.backgroundColor = 0xE29966;
_button.border = true;
this.addChild(_label);
this.addChild(_button);
_button.x = 310; _fileRefer = new FileReference();
_button.addEventListener(MouseEvent.CLICK,toSelect);
_fileRefer.addEventListener(Event.SELECT,onSelect);
_fileRefer.addEventListener(Event.CANCEL,onCancel);
}
private function toSelect(e:MouseEvent):void
{
_fileRefer.browse(); //browse(typeFilter:Array=null) 使用 typeFilter 参数,可决定对话框显示哪些文件。
_button.removeEventListener(MouseEvent.CLICK,toSelect);
}
private function onProgress(e:ProgressEvent):void
{
_label.text = Number(Math.round(e.bytesLoaded / e.bytesTotal*100))+"%";
//label.text = e.bytesLoaded+"/"+e.bytesTotal;
}
private function onComplete(e:Event):void
{
_fileRefer.removeEventListener(Event.COMPLETE,onComplete);
_fileRefer.removeEventListener(ProgressEvent.PROGRESS,onProgress);
_button.addEventListener(MouseEvent.CLICK,toUpload);
_label.text = "load complete!";
_button.text = "upload";
}
private function toUpload(e:MouseEvent):void{
onUpLoad(_fileRefer);
}
private function onSelect(e:Event):void
{
trace("the name of the selected file:",(e.target as FileReference).name);
_label.text = "file name:"+(e.target as FileReference).name;
_fileRefer.addEventListener(Event.COMPLETE,onComplete);
_fileRefer.addEventListener(ProgressEvent.PROGRESS,onProgress);
_fileRefer.load();
}
private function onCancel(e:Event):void
{
trace("cancel to upload");
_button.addEventListener(MouseEvent.CLICK,toSelect);
}
/**
* 调用FileReference的实例方法upload()实现文件上传
* @param file
*/
private function onUpLoad(file:FileReference):void
{
_label.text = "file size"+Number(file.size/1024/1024).toFixed(2)+"M";
var variables:URLVariables = new URLVariables();
variables.fileName = file.name;
_request.data = variables;
_request.method = URLRequestMethod.POST;
file.addEventListener(ProgressEvent.PROGRESS, progressHandler);
file.addEventListener(Event.COMPLETE, completeHandler);
file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,completeDataHandler);
try
{
file.upload(_request);
}
catch(error:Error)
{
trace(error.message);
} function progressHandler(e:ProgressEvent):void
{
_label.text = "uploading "+Math.round(100 * e.bytesLoaded / e.bytesTotal) + "%";
}
function completeHandler(e:Event):void
{
var file:FileReference = FileReference(e.target);
file.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
file.removeEventListener(Event.COMPLETE, completeHandler);
_button.removeEventListener(MouseEvent.CLICK,toUpload);
_button.addEventListener(MouseEvent.CLICK,toSelect);
_label.text = "upload complete";
_button.text = "click here to select file";
}
function completeDataHandler(e:DataEvent):void
{
var file:FileReference = FileReference(e.target);
file.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA,completeHandler);
trace(e.data);//上传成功后,从后台返回的数据
}
}
/**
* FileFilter 类用于表示在调用 FileReference.browse() 方法、FileReferenceList.browse() 方法或调用 File、FileReference 或 FileReferenceList 对象的 browse 方法时显示的文件浏览对话框中显示用户系统上的哪些文件。
* @return
*/
private function getImageTypeFilter():FileFilter {
return new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png");
} private function getTextTypeFilter():FileFilter {
return new FileFilter("Text Files (*.txt, *.rtf)", "*.txt;*.rtf");
}
}
}
[ActionScript3.0] 使用FileReference处理单个文件的上载的更多相关文章
- 原创教程“ActionScript3.0游戏中的图像编程”開始连载啦!
经过近两年的不懈努力,笔者的原创教程"ActionScript3游戏中的图像编程"最终在今日划上了完美的句号!这其中记录着笔者多年来在游戏制作,尤其是其中图像处理方 ...
- spring mvc文件上传(单个文件上传|多个文件上传)
单个文件上传spring mvc 实现文件上传需要引入两个必须的jar包 1.所需jar包: commons-fileupload-1.3.1.jar ...
- Zip文件压缩(加密||非加密||压缩指定目录||压缩目录下的单个文件||根据路径压缩||根据流压缩)
1.写入Excel,并加密压缩.不保存文件 String dcxh = String.format("%03d", keyValue); String folderFileName ...
- JAVA代码实现下载单个文件,和下载打包文件
//下载单个文件调用方法 /** * response * imgPath 下载图片地址 * fileName 保存下载文件名称 * @date 2015年4月14日 下午 ...
- sruts2:单个文件上传,多个文件上传(属性驱动)
文件上传功能在Struts2中得到了很好的封装,主要使用fileUpload上传组件. 1. 单个文件上传 1.1 创建上传单个文件的JSP页面.显示提交结果的JSP页面 uploadTest1.js ...
- 【ActionScript】ActionScript3.0对舞台组件的增删改查
以一个样例来说明ActionScript3.0对舞台组件的增删改查 例如以下图: 在Flash执行的时候,通过脚本.斜向下生成text0-text9十个文本节点. 提供两个功能. 1.在右上角,用户输 ...
- Struts2 单个文件上传/多文件上传
1导入struts2-blank.war所有jar包:\struts-2.3.4\apps\struts2-blank.war 单个文件上传 upload.jsp <s:form action= ...
- rsyslog 读取单个文件测试
rsyslog 测试(rsyslog 必须yum 安装uat-web02:/root# rpm -qa | grep rsyslog rsyslog-8.21.0-1.el6.x86_64) //读取 ...
- 打印 上一主题 下一主题 利用cURL实现单个文件分多段同时下载,支持断点续传(修订版)
利用cURL实现单个文件分多段同时下载,支持断点续传(修订版) [复制链接] 摘自 http://bbs.chinaunix.net/thread-917952-1-1.html 在ubuntu下 ...
随机推荐
- cluster DNS
[root@mhc1 dns]# pwd/root/test/k8s/kubernetes/cluster/addons/dns [root@mhc1 dns]# export DNS_SERVER_ ...
- Shiro框架的简单应用
一.概念 Shiro是一个安全框架,可以进行角色.权限管理. Shiro主要功能如下:Authentication(认证):用户身份识别,通常被称为用户“登录”Authorization(授权):访问 ...
- for 续6
---------siwuxie095 for 实际运用样例(/f 的使用不列出来): for %%i in (*) do echo %%i 显示当前目录下 ,所有非文 ...
- Rabbitmq的几种交换机模式
Rabbitmq的核心概念(如下图所示):有虚拟主机.交换机.队列.绑定: 交换机可以理解成具有路由表的路由程序,仅此而已.每个消息都有一个称为路由键(routing key)的属性,就是一个简单的字 ...
- ROS标定IDS相机
参考 ROS 相机标定http://blog.csdn.net/ArtistA/article/details/51125560 ROS里的标定程序只要使用了OPNCV的标定程序: opencv 相机 ...
- 如何让多个android listview同时使用一个滚动条
如何让多个android listview同时使用一个滚动条 重新设置ListView的高度 /** * 设置listview高度,注意listview子项必须为LinearLayout才能调用该方法 ...
- Shell编程-01-Shell脚本初步入门
目录 什么是Shell 什么是Shell脚本 Shell脚本语言的种类 常用操作系统默认Shell Shell 脚本的建立和执行 脚本规范 什么是Shell 简单来说Shell其实就是一个命令 ...
- (广搜)可口可乐 -- hdu -- 1495
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1495 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- 机器学习—K近邻
一.算法原理 还是图片格式~ 二.sklearn实现 import pandas as pd import numpy as np import matplotlib.pyplot as plt im ...
- dxbarmanager生成传统下拉式样的菜单
传统菜单 //创建一个dxSubItem,相当于创建一个主菜单项 dxBarSubItem := TdxBarSubItem.Create(Self); dxBarSubItem.Caption := ...