参考网上代码实现的FLEX+PHP上传文件功能
upload.mxml内容:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" borderColor="#FFFFFF"
backgroundGradientAlphas="[1.0, 1.0]"
backgroundGradientColors="[#FFFFFF, #FFFFFF]"
height="30" width="420"
initialize="init('')">
<mx:Script>
<![CDATA[
public var file_fr:FileReference = new FileReference();
public var LI:LoaderInfo;
var list_obj:Object = new Object();
var max_size = 0;
//保存文件地址
var up_url = "save.php";
//进度条颜色
var bg_color = "";
//上传文件类型
var limit_type="";
//保存文件的主目录
var savemainpath="";
//当点击浏览按钮时
private function brownsfile():void{
if (limit_type != "")
{
var s:String = "";
var arr:Array = limit_type.split("|");
var fst:Number = 1;
for(var i=0;i<arr.length;i++)
{
if (arr[i] == "") continue;
if (!fst) s+= ';';
s += "*."+arr[i];
fst = 0;
}
var browseFilter:FileFilter = new FileFilter("受限文件("+s+")", s);
file_fr.browse([browseFilter]);//.browse([{description: "受限文件("+s+")", extension: s}]);
}
else
file_fr.browse();
configureListeners(file_fr);
}
//绑定监听
private function configureListeners(dispatcher:IEventDispatcher):void {
dispatcher.addEventListener(Event.CANCEL, cancelHandler);
dispatcher.addEventListener(Event.COMPLETE, completeHandler);
dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
//dispatcher.addEventListener(Event.OPEN, openHandler);
dispatcher.addEventListener(ProgressEvent.PROGRESS, onProgress);
dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
dispatcher.addEventListener(Event.SELECT, fileSelected);
dispatcher.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,uploadCompleteDataHandler);
}
//当选中文件时
public function fileSelected(event:Event):void{
file_fr = FileReference(event.target);
upload_butn.enabled = true;
name_txt.text = file_fr.name + " ("+deal_size(file_fr.size)+")";
if (file_fr.size > max_size && max_size != 0)
{
init("单个上传文件不能大于 "+deal_size(max_size));
}
}
//当点击上传或取消按钮时
private function uploadfile() {
if (upload_butn.label == "上传")
{
var variables:URLVariables = new URLVariables();
variables.savepath = savemainpath;
var uploadURL = new URLRequest();
uploadURL.url = up_url;
uploadURL.data = variables;
uploadURL.method=URLRequestMethod.POST;
file_fr.upload(uploadURL);
upload_butn.label = "取消";
browse_butn.enabled = false;
}else
{
file_fr.cancel();
init("");
}
}
//正在上传中时
private function onProgress(event:ProgressEvent)
{
var tmploaded:Number = event.bytesLoaded;
//var tmptotal:Number = event.bytesTotal;
name_txt.text = "正在上传"+file_fr.name+"("+deal_size(file_fr.size)+"): "+Math.floor(tmploaded*100/file_fr.size)+"%";
drawRec(tmploaded,file_fr.size);
}
//上传完成并返回数据时
private function uploadCompleteDataHandler(event:DataEvent):void{
var result:XML = new XML(event.data);
var tmpStr = result.toString();
tmpStr = tmpStr.substring(0,6);
if(tmpStr=="Error:")
init("文件上传失败:Error=[403 or 404]");
else
ExternalInterface.call("uploadJSAction", result.toString(),savemainpath);
}
//上传完成时
private function completeHandler(event:Event){
init("文件上传完毕!");
}
//文件读写失败时
public function ioErrorHandler(event:IOErrorEvent)
{
init("文件上传失败: " + file_fr.name+";Error:文件 I/O 错误。");
}
//安全错误
public function securityErrorHandler(fileRef:FileReference,error)
{
init( "安全设置错误 " + file_fr.name + ":" + error);
}
//HTTP错误,当出现其他错误时,save.php也会发出404错误
public function httpStatusHandler(event:HTTPStatusEvent)
{
init("文件上传失败!"+event.status);
}
//取消上传时
public function cancelHandler(){
init("");
}
//初始化
public function init(s:String):void{
//获得参数对象
var param:Object = Application.application.parameters;
//上传最大文件
max_size = param["maxsize"];
max_size = (!max_size)?20*1024:max_size*1024;
//保存文件地址
up_url = param["savefile"];
up_url = (up_url=="")?"save.php":up_url;
//进度条颜色
bg_color = param["bgcolor"];
bg_color = (bg_color == "")?Math.random()*0xff5079:"0x"+bg_color;
//上传文件类型
limit_type = param["limit"];
limit_type = (limit_type=="")?"":limit_type;
//上传文件类型
savemainpath = param["imgpath"];
savemainpath = (savemainpath=="")?"":savemainpath;
progress_cav.setStyle("backgroundColor",bg_color);
if (!s) name_txt.text = "选择一个文件";//+strTemp;
else name_txt.text = s;
browse_butn.enabled = true;
upload_butn.enabled = false;
upload_butn.label = "上传";
progress_cav.width=0;
}
//得到URL传递的参数值
private function get_val(s,val)
{
var arr = s.split("?");
if (!arr[1]) return "";
s = arr[1];
arr = s.split(val+"=");
if (!arr[1]) return "";
s = arr[1];
arr = s.split("&");
return arr[0];
}
/*处理文件大小表示方法*/
private function deal_size(s:Number):String {
var danwei:Array = ["Byte","KB","MB","GB" ];
var d:Number = 0;
while ( s >= 900 )
{
s = Math.round(s*100/1024)/100;
d++;
}
return s+" "+danwei[d];
}
//画进度背景条
private function drawRec (i:Number,t:Number):void {
var per:Number = Math.floor(i*100/t)/100;
var tmpWidth:Number = this.width * per;
progress_cav.width=tmpWidth;
}
]]>
</mx:Script>
<mx:Canvas x="0" y="0" width="10" height="30" backgroundColor="#5075FF" borderColor="#FFFFFF" color="#FFFFFF" borderStyle="none" id="progress_cav">
</mx:Canvas>
<mx:TextInput x="307" y="4" height="22" width="51" borderStyle="none" cornerRadius="4"/>
<mx:TextInput x="363" y="4" height="22" width="51" borderStyle="none" cornerRadius="4"/>
<mx:Button x="363" y="4" label="上传" fontSize="12" id="upload_butn" enabled="false" click="uploadfile();" height="22" cornerRadius="0"/>
<mx:Button x="307" y="4" label="浏览" fontSize="12" id="browse_butn" click="brownsfile();" height="22" cornerRadius="0"/>
<mx:TextInput x="4" y="4" width="300" themeColor="#B5B5B5" enabled="true" editable="false" borderStyle="solid" id="name_txt" text="选择一个文件" fontSize="12" color="#000000" height="22"/>
</mx:Application>
saveimg.php内容如下:
<?php
//取得保存文件的主目录
$savepath = $_POST["savepath"];
foreach($_FILES as $f)
{
session_start();
//取得服务器当前时间:HHMISSMMM
$saveFileName = date("dHis");
$saveFileName = substr(session_id(),0,8)."_".$saveFileName.substr(microtime(),2,4);
//取得上传的文件类型
$uploadFileType = strtolower($f['name']);
//echo $uploadFileType;
//exit;
$uploadFileType = strrchr($uploadFileType,".");
//设定保存的文件名
$saveFileName = $saveFileName.$uploadFileType;
//上传文件保存目录
$UploadPath = "../../upload/".$savepath."/";
//根据月份创建子目录
$nowMonth = date("Ym");
mkdir($UploadPath.$nowMonth, 0700);
$UploadPath = $UploadPath.$nowMonth."/";
//处理中文名
if (function_exists("iconv")) $f[name] = iconv("UTF-8","GB2312",$f[name]);
//检查是否已经存在同名文件
if (file_exists($f[name])) echo "Error:403 Found Same Filename";
//保存文件
if (!@move_uploaded_file($f["tmp_name"],$UploadPath.$saveFileName))
echo "Error:404 Not Found";
else
echo $nowMonth."/".$saveFileName;
}
?>
测试页面内容:test.html内容:
<label>上传图片:</label>
<input type="hidden" name="uploadfile" id="uploadfile" value="">
<span id="uploadSpanDiv"></span>
<span id="uploadSwfSpanDiv" style="display:">
<embed
src="./swf/upload.swf?savefile=./save/savedpjcimg.php&limit=jpeg|gif|jpg&maxsize=204800&bgcolor=ff5079&imgpath=dpjcimages"
width="420"
height="30"
align="middle"
play="true"
loop="false"
quality="high"
type="application/x-shockwave-flash">
</embed>
</span>
相关JS内容:
function uploadJSAction(fileName,imgpath){
$("#uploadSpanDiv").html("<a href='javascript:showimg(\""+fileName+"\",\""+imgpath+"\")'>"+fileName+"</a> <a href='javascript:showSwf();'>删除文件</a>");
$("#uploadSpanDiv").css("display","");
$("#uploadSwfSpanDiv").css("display","none");
$("#uploadfile").val(fileName);
}
function showSwf(){
$("#uploadSwfSpanDiv").css("display","");
$("#uploadSpanDiv").css("display","none");
$("#uploadfile").val("");
}
function showimg(fileName,imgpath){
$(document).jdialog({title:"预览上传的图片",content : "url:get?show_upload_image.php?img="+fileName+"&path="+imgpath});
}