利用flash+PHP上传文件

本文详细介绍了一个使用Flash实现的文件上传组件的代码实现过程。该组件支持多种文件类型,包括图片、文本和FLV文件,并实现了文件大小限制及上传进度显示等功能。通过监听不同事件,可以获取文件选择、上传进度及完成等状态。
废话少说,先看flash代码,在flash中新建一个文档,放上两个button,一个progressbar组件:
import flash.net.FileReference;
import mx.controls.Alert;

var my_pb:mx.controls.ProgressBar;
var maxSize = 1000*1000*5; //文件大小限制:5M
//设置进度栏模式
my_pb.mode = "manual";
my_pb.label = "上传进度:%1%";
//进度栏增加前的最小数值
my_pb.minimum = 0;
// 进度栏停止前的最大值
my_pb.maximum = 100;
var increment_num:Number = my_pb.minimum;

var allTypes:Array = new Array();
var imageTypes:Object = new Object();
imageTypes.description = "Images (*.jpg, *.jpeg, *.gif, *.png)";
imageTypes.extension = "*.jpg; *.jpeg; *.gif; *.png";
allTypes.push(imageTypes);

var textTypes:Object = new Object();
textTypes.description = "Text Files (*.txt, *.rtf)";
textTypes.extension = "*.txt;*.rtf";
allTypes.push(textTypes);

var flvType:Object =new Object();
flvType.description ="flv Files (*.flv)";
flvType.extension ="*.flv";
allTypes.push(flvType);

// 定义警告确认后的动作。
var myClickHandler:Function = function (evt_obj:Object) {
if (evt_obj.detail == Alert.OK) {
trace("start stock app");
}
};

var listener:Object = new Object();

listener.onSelect = function(file:FileReference):Void {
trace("onSelect: " + file.name);
//if(!file.upload(" http://localhost/upfiles/hlp.php")) {
// trace("Upload dialog failed to open.");
//}
    if (file.size<=maxSize)
    {
      //strState.text = "您选择得文件:" + file.name + "/n";
      btnUpload.enabled = true;
    }else
    {
      msg( "对不起您选择的文件太大!");
      btnUpload.enabled = false;
    }
}

listener.onCancel = function(file:FileReference):Void {
trace("onCancel");
}

listener.onOpen = function(file:FileReference):Void {
trace("onOpen: " + file.name);
}

listener.onProgress = function(file:FileReference, bytesLoaded:Number, bytesTotal:Number):Void {
trace("onProgress with bytesLoaded: " + bytesLoaded + " bytesTotal: " + bytesTotal);
    my_pb.setProgress ((bytesLoaded / bytesTotal) * 100, my_pb.maximum);
}

listener.onComplete = function(file:FileReference):Void {
trace("onComplete: " + file.name);
    msg("上传完毕!");
}

listener.onHTTPError = function(file:FileReference):Void {
trace("onHTTPError: " + file.name);
    msg("onHTTPError: " + file.name);
}

listener.onIOError = function(file:FileReference):Void {
trace("onIOError: " + file.name);
    msg("onIOError: " + file.name);
}

listener.onSecurityError = function(file:FileReference, errorString:String):Void {
trace("onSecurityError: " + file.name + " errorString: " + errorString);
    msg("onSecurityError: " + file.name + " errorString: " + errorString);
}

var fileRef:FileReference = new FileReference();
fileRef.addListener(listener);
this.btnBrowse.onRelease = function () {
    fileRef.browse(allTypes);
};
this.btnUpload.onRelease = function () {
    if(!fileRef.upload(" http://localhost/upfiles/upfile3.php")) {
trace("Upload dialog failed to open.");
}
    // 显示警告对话框。

}
function msg(msgtxt:String) {
    Alert.show(msgtxt, "消息", Alert.OK , this, myClickHandler, "stockIcon", Alert.OK);
}
php文件很简单:
<?php
// Flash 传递的文件表单 name 属性为 Filedata
$fileName = $_FILES["Filedata"]["name"];
$file = $_FILES["Filedata"]["tmp_name"];
$path = "uploadFiles/";
if (move_uploaded_file($file, $path . $fileName)){
// echo 1;
}else{
// echo 0;
}
?>
分片与并发结合 将一个大文件分割成多块 并发上传 极大地提高大文件上传速度 当网络问题导致传输错误时 只需要重传出错分片 而不是整个文件 另外分片传输能够更加实时的跟踪上传进度 预览 压缩 支持常用图片格式jpg jpeg gif bmp png预览与压缩 节省网络数据传输 解析jpeg中的meta信息 对于各种orientation做了正确的处理 同时压缩后上传保留图片的所有原始meta数据 多途径添加文件 支持文件多选 类型过滤 拖拽 文件&文件图片粘贴功能 粘贴功能主要体现在当有图片数据在剪切板中时(截屏工具如QQ Ctrl + ALT + A 网页中右击图片点击复制) Ctrl + V便可添加此图片文件 HTML5 & FLASH 兼容主流浏览器 接口一致 实现了两套运行时支持 用户无需关心内部用了什么内核 同时Flash部分没有做任何UI相关的工作 方便不关心flash的用户扩展和自定义业务需求 MD5秒传 当文件体积大 量比较多时 支持上传前做文件md5值验证 一致则可直接跳过 如果服务端与前端统一修改算法 取段md5 可大大提升验证性能 耗时在20ms左右 易扩展 可拆分 采用可拆分机制 将各个功能独立成了小组件 可自由搭配 采用AMD规范组织代码 清晰明了 方便高级玩家扩展 ">分片与并发结合 将一个大文件分割成多块 并发上传 极大地提高大文件上传速度 当网络问题导致传输错误时 只需要重传出错分片 而不是整个文件 另外分片传输能够更加实时的跟踪上传进度 预览 压缩 支持常 [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值