FLEX+PHP+JS 上传

参考网上代码实现的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});
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值