swfupload

 

利用swfupload上传文件

 

首先,先介绍一个swfUplod吧.

SWFUpload是一个客户端文件上传工具,最初由Vinterwebb.se开发,它通过整合flash与javascript技术为web开发者提供了一个具有丰富功能继而超越传统<input type="file" />标签的文件上传模式。

利用swfupload上传文件 - audio - 踏雪无痕

一从大体上来说,swfUpload主要有这样几个重要的文件

1.swfupload_f9.swf.   这个是核心的上传用的flash文件.

2.upload.aspx              这个是把文件上传到服务器上后,所要处理的页面.

3.default.css                用于显示进度条的CSS文件.可以根据自己喜好进行修改!

4.swfupload.js            定义了swfupload_f9组建的属性和一些方法.(最好不好动).

5.handler.js                 定义了,用于处理swfupload_f9组建所触发的事件.可以根据自己需要,进行修改.

可以说,swfUpload利用这样5个文件就能做到自己任何想要的上传功能.......(我只是说可能....呵呵)

二.介绍各个文件

1.swfupload_f9.swf的用法:

 

//初始化一个上传的flash对象.

var swfu;

var uploadpage="upload.aspx";

var afterLoadPage="afterUpload.aspx";

 

//在窗体加载事件里初始化       

window.onload = function () {

         var progressTd=document.getElementById('progressTd');

         progressTd.style.display="none";

         swfu = new SWFUpload({

              // Backend Settings

              upload_url: uploadpage, // Relative to the SWF file

            post_params : {

                "ASPSESSID" : "<%=Session.SessionID %>"

               

            },

 

              // File Upload Settings

              file_size_limit : "1900000",     //最大2G,这里是1.9G左右大小.

              file_types : "*",               //设置选择文件的类型

              file_types_description : "all extention type!",//这里是描述文件类型

              file_upload_limit : "0",    //0代表不受上传个数的限制

 

            //以下为处理的事件

              file_queued_handler : fileQueued,    //选择过文件后,把文件放入队列后,所触发的事件

              file_dialog_complete_handler : fileDialogComplete,//这个上面的查不多,当关闭选择框后,做触发的事件.

              upload_progress_handler : uploadProgress,//处理上传进度

              upload_error_handler : uploadError,//错误处理事件

              upload_success_handler : uploadSuccess,//上传成功够,所处理的时间

              upload_complete_handler : uploadComplete,//上传结束后,处理的事件

 

              //flash的位置.

              flash_url : "swfupload_f9.swf", // 相对路径

              custom_settings : {

                   upload_target : "divFileProgressContainer"

              },

 

              // Debug Settings

              debug: false

         });

}

 

swfu常用的方法有5个,分别为:

1>swfu.selectFile();

一次选择单个文件.

2>swfu.selectFiles();

一次选择多个文件.

3>swfu.startUpload();

开始上传文件

4>swfu.cancelUpload("SWFUpload_0_0");

取消正在上传,或将要上传的文件。SWFUpload_0_0表示第一个文件,SWFUpload_0_1表示第二个文件。。。。一直往后推。

5>swfu.stopUpload()

停止文件的上传。

 

这5个方法都是比较常用的,大家要记者。

 

2.常用到的事件,自定义。(大家可以根据自己的需要,进行修改这些方法,其实就是一些普通的javascript 方法。)

 

 

//1。当加载了文件后,触发的事件.这里,是让他的名字赋予txtbox

function fileQueued(file)

{

     try {

         var txtFileName = document.getElementById("txtFileName");

         txtFileName.value = file.name;

         }

     catch (e)

         {

         }

 

}

 

//2。上传进度设置事件

function uploadProgress(file, bytesLoaded) {

 

     try {

         var percent = Math.ceil((bytesLoaded / file.size) * 100);

 

         var progress = new FileProgress(file, this.customSettings.upload_target);

         progress.setProgress(percent);

         if (percent === 100) {

              progress.setStatus("上传完毕,正在释放内存,请锁定鼠标,不要乱动,正在保存......");

              progress.toggleCancel(false, this);

             

              //跳转到上传成功网页

              refresh();

         }

        //显示上传信息

        else {

              progress.setStatus("上传中,请梢后......‖已上传:"+(bytesLoaded/(1024*1024))+"/"+file.size+" 『"+percent+"%』");

              progress.toggleCancel(true, this);

         }

     } catch (ex) {

         this.debug(ex);

     }

}

 

 //3。上传一个文件成功后,所触发的事件。

function uploadComplete(file) {

     try {

         //若有多个文件,则上传一个成功后,继续上传,否则显示上传成功!

         if (this.getStats().files_queued > 0) {

              this.startUpload();

         } else {

              var progress = new FileProgress(file, this.customSettings.upload_target);

              progress.setComplete();

              progress.setStatus("所有文件都上传成功!.");

              progress.toggleCancel(false);

         }

     } catch (ex) {

         this.debug(ex);

     }

}

//4。删除刚才选择的上传文件

function uploadCancel()

{

    swfu.cancelUpload("SWFUpload_0_0");

}

 

//5。当选择框被关闭后,所触发的事件.这里,我还没有用.以后真对需要,可以填写在里面

function fileDialogComplete(numFilesSelected, numFilesQueued)

 {  

}

 

//6。错误事件处理。

function uploadError(file, errorCode, message) {

     var imageName = "error.gif";

     var progress;

     try {

         switch (errorCode) {

         case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:

              try {

                  return;

                   progress = new FileProgress(file, this.customSettings.upload_target);

                   progress.setCancelled();

                   progress.setStatus("已取消!");

                   progress.toggleCancel(false);

              }

              catch (ex1) {

                   this.debug(ex1);

              }

              break;

         case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:

              try {

                   progress = new FileProgress(file, this.customSettings.upload_target);

                   progress.setCancelled();

                   progress.setStatus("Stopped");

                   progress.toggleCancel(true);

              }

              catch (ex2) {

                   this.debug(ex2);

              }

         case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:

              imageName = "uploadlimit.gif";

              break;

         default:

              alert(message);

              break;

         }

 

         addImage("images/" + imageName);

 

     } catch (ex3) {

         this.debug(ex3);

     }

 

}

 

 

大家可以把这些文件保存到一个.js文件里,在要上传的页面里引用此js文件,就可以了!

 

3.upload.aspx文件。

这个文件是把文件以MIME的形式读取到服务器上后,所触发的。是一个隐藏的页面。大家把自己想要进行的后续操作,都写在这个页面的page_load事件里。比如说:保存文件到C:/,并把此文件的附加信息保存到数据库里。

 

upload.aspx.cs

 

 

using System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.IO;

using System.Collections.Generic;

 

public partial class upload : System.Web.UI.Page

{

    protected void Page_Load(object sender, EventArgs e)

    {

       

        try

        {

           

            // 获取从MIME中读取出来的文件

            HttpPostedFile postedFile = Request.Files["Filedata"];

 

            //获得文件存放路径

            string serverFilePath = "";

 

            string fileExtention = postedFile.FileName.Substring(postedFile.FileName.LastIndexOf("."));

            //获取文件大小

            double size = (double)(postedFile.ContentLength) / (1024 * 1024);

 

            //判断是哪种类型的上传

            string oper = Request.QueryString["oper"].ToString();

            //1.若是文档上传

            switch (oper)

            {

               case "fileUpload":

                    {

 

                        //获取文档的保存路径

                        serverFilePath = sourceCenter.getSourcePathByArgs("文档");

                        //获取传过来的参数

                        string fileName = Request.QueryString["fileName"].ToString();//文件名

                        string fileAuthor = Request.QueryString["fileAuthor"].ToString();//文件的作者

                        string fileSource = Request.QueryString["fileSource"].ToString();//文件来源

                        string fileClass = Request.QueryString["fileClass"].ToString();//文件类型

                        string[] fileClassInfo = fileClass.Split("~".ToCharArray());

                        string fileType = Request.QueryString["fileType"].ToString();//文件的后缀名

                        string keyWords = Request.QueryString["keyWords"].ToString();//关键字

                        string fileContent = Request.QueryString["fileContent"].ToString();//文件的简介

                        string filePubDate = Request.QueryString["filePubDate"].ToString();//文件的发表日期

 

                        //3.插入主表

                        int sourceId = sourceCenter.insertMainInfo(fileName, "文档", fileContent, serverFilePath, size.ToString("f2"), 0, "1", "徐辉", DateTime.Now, fileExtention);

                        //4.插入文档表

                        if (filePubDate != "null")

                            filePubDate=Convert.ToDateTime(filePubDate).ToShortDateString();

                        sourceCenter.insertFileInfo(sourceId, fileClassInfo[0], fileAuthor, filePubDate, fileSource, keyWords, fileType);

 

                        DirectoryInfo dirInfo = new DirectoryInfo(serverFilePath);

                        //若路径不存在,则创建

                        if (!dirInfo.Exists)

                            dirInfo.Create();

 

                        //连接文件保存的绝对路径

                        serverFilePath += sourceId.ToString() + "~" + fileName;

 

                        break;

                    }

                case "softUpload":

                   {

                        //1.获取软件的保存路径

                        serverFilePath = sourceCenter.getSourcePathByArgs("软件");

                        //2.获取传过来的参数

                        string softName = Request.QueryString["softName"].ToString();

                        string softClass = Request.QueryString["softClass"].ToString();

                        string platform = Request.QueryString["platform"].ToString();

                        string softRight = Request.QueryString["softRight"].ToString();

                        string language = Request.QueryString["language"].ToString();

                        string developCompany = Request.QueryString["developCompany"].ToString();

                        string softContent = Request.QueryString["softContent"].ToString();

 

                        //3.插入主表

                        int sourceId=sourceCenter.insertMainInfo(softName, "软件", softContent, serverFilePath, size.ToString("f2"), 0, "1", "徐辉", DateTime.Now, fileExtention);

 

                        //4.插入文档表

                        sourceCenter.insertSoftInfo(sourceId, softClass, platform, softRight, language, developCompany);

 

                        DirectoryInfo dirInfo = new DirectoryInfo(serverFilePath);

                        //若路径不存在,则创建

                        if (!dirInfo.Exists)

                            dirInfo.Create();

 

                        //5.连接文件保存的绝对路径

                        serverFilePath += sourceId.ToString() + "~" + softName;

                        break;

                    }

                case "mediaUpload":

                    {

 

                        //1.获取软件的保存路径

                        serverFilePath = sourceCenter.getSourcePathByArgs("媒体");

                        //2.获取传过来的参数

                        string mediaName = Request.QueryString["mediaName"].ToString();

                        string mediaLanguage = Request.QueryString["mediaLanguage"].ToString();

                        string actor = Request.QueryString["actor"].ToString();

                        string mediaExtention = Request.QueryString["mediaExtention"].ToString();

                        string mediaKind = Request.QueryString["mediaKind"].ToString();

                        string mediaClass = Request.QueryString["mediaClass"].ToString();

                        string mediaPubDate = Request.QueryString["mediaPubDate"].ToString();

                        string mediaContent = Request.QueryString["mediaContent"].ToString();

 

                        //3.插入主表

                        int sourceId=sourceCenter.insertMainInfo(mediaName, "媒体", mediaContent, serverFilePath, size.ToString("f2"), 0, "1", "徐辉", DateTime.Now, fileExtention);

 

                        //4.插入文档表 

                        sourceCenter.insertMediaInfo(sourceId, mediaClass, mediaKind, mediaLanguage, actor, mediaPubDate, mediaExtention);

                        DirectoryInfo dirInfo = new DirectoryInfo(serverFilePath);

                        //若路径不存在,则创建

                        if (!dirInfo.Exists)

                            dirInfo.Create();

 

                        //5.连接文件保存的绝对路径

                        serverFilePath += sourceId.ToString() + "~" + mediaName;

 

 

                       

                        break;

                    }

                case "imageUpload":

                    {

 

                        break;

                    }

                default:

                    {

                        break;

                    }

            }

 

            //保存上传上来的文件

            postedFile.SaveAs(@serverFilePath+fileExtention);

        }

        catch

        {

            //若保存时发生错误。

            Response.StatusCode = 500;

            Response.Write("文档上传时,发生错误!");

            Response.End();

        }

         finally

         {            

              Response.End();

         }

    

     }

}

 

 

三、总结:

1。上传主界面,初始化一个swfu对象

2。根据handle.js,抽取自己需要的方法,重写,并保存为自己的js文件。

3。新建一个upload.aspx文件,把一些后续操作放在page_load事件里。

4。打完收工!休息,睡觉!哈哈!

 

好了,大家现在明白了,怎么做自己的文件上传了吗?呵呵!虽然没什么技术含量,大家不要骂我。要不,我会伤心的,呵呵!

 

 

<script id="dwr-st-0" src="http://ud.blog.163.com/audio8860/dwr/call/plaincall/BlogBean.getCommentsByBlog.dwr?callCount=1&scriptSessionId=%24%7BscriptSessionId%7D07da48ea4b7f4035cf30b314900cd6b6&c0-scriptName=BlogBean&c0-methodName=getCommentsByBlog&c0-id=0&c0-param0=string%3Afks_085070080095086071082086084095085081086075086081082066&c0-param1=string%3A177827412008102962215736&c0-param2=boolean%3Afalse&c0-param3=boolean%3Afalse&batchId=0"></script> <script id="dwr-st-0" src="http://ud.blog.163.com/audio8860/dwr/call/plaincall/YoudaoBean.getPostSense.dwr?callCount=1&scriptSessionId=%24%7BscriptSessionId%7D07da48ea4b7f4035cf30b314900cd6b6&c0-scriptName=YoudaoBean&c0-methodName=getPostSense&c0-id=0&c0-param0=string%3Afks_085070080095086071082086084095085081086075086081082066&c0-param1=string%3Ablog%252Fstatic%252F177827412008102962215736&c0-param2=number%3A0&c0-param3=boolean%3Afalse&c0-param4=boolean%3Afalse&batchId=4"></script>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值