浅谈FileUpload控件和SWFUpload控件

来源:互联网 发布:三星打印机软件下载 编辑:程序博客网 时间:2024/05/01 22:21

浅谈FileUpload控件和SWFUpload控件

 

这些天一直在弄文件上传,从中学到了一些知识和大家分享一下,同时也希望大家帮忙指正。

 

先看看FileUpload控件吧,这个一般都比较熟悉,它是VS的一个自定义控件用起来很方便,但是值得注意的是每次上传文件时,只能选取一个文件,也就是说每次我们上传文件时,只能一个控件上传一个文件。对于多文件上传的话我想如果限定在此控件的话,那么只能多次添加文件实现,或者利用多个FileUpload的控件一起上传达到上传多文件目的。但不管哪个方法原理都是一样的我们并不能一个控件选取多个文件。下面是我我写的关于多个控件一起上传文件代码

首先,需要在前台Default.aspx中拖放多个FileUpload的控件(这里放四个)然后放一个按钮

<body>

<form id="form1" runat="server">

<div>

<asp:FileUpload runat="server" Width="320px"ID="FileUpload1" class="text"></asp:FileUpload>

<asp:FileUpload runat="server" Width="320px" ID="FileUpload2" class="text"></asp:FileUpload>

<asp:FileUpload runat="server" Width="320px" ID="FileUpload3" class="text"></asp:FileUpload>

<asp:FileUpload runat="server" Width="320px" ID="FileUpload4" class="text"></asp:FileUpload>

</div>

 <div> 

<p align="center"><asp:Button ID="FileUpload" runat="server" Text="开始上传" onclick="FileUpload_Click" /> </p>

  </div>

</form>

</body>

这里主是演示下原理 布局就随意了

添加好按钮后在设计模式下双击添加点击事件

下面Default.aspx.cs中的按钮点击事件

#region //消息输出

 protected void ShowMessageBox(string strMessage)

 {

Response.Write(string.Format("<script>alert('{0}')</script>", strMessage));

  }

  #endregion

 

 

 

     protected void FileUpload_Click(object sender, EventArgs e)

 {

     HttpFileCollection hfc = Request.Files;//获取上传文件

 for (int i = 0; i < hfc.Count; i++)

       {

          if (hfc[i].ContentLength > 0)

           {

                   

               bool filesAllow = false;//设置文件是否被上传

               //从控件中读取文件名

               string strFilename = hfc[i].FileName;

               //读取设置文件格式,判断上传文件格式是否满足条件

 string Type = ConfigurationManager.AppSettings["FileTypeLimit"].ToString();

                              

               //将字符串差分

                    string[] fileType = Type.Split(';');

               //获取上传文件后缀

 string name = strFilename.Substring(strFilename.LastIndexOf("."),

              strFilename.Length - strFilename.LastIndexOf("."));

                    // string fileExtension = Path.GetExtension

                (strFilename).ToLower();//得到上传文件格式

 

 for (int k = 0; k < fileType.Length; k++)//判断上传文件是否匹配

      {

           if (name == fileType[k])

             filesAllow = true;

       }

    if (filesAllow == true)

      {

        //获取上传文件限制大小

        int Filelength = Convert.ToInt32(ConfigurationManager.AppSettings["FileSizeLimit"].ToString());

        //获取上传文件的大小

    int localFileLength = hfc[i].ContentLength;

    if (localFileLength/1024<= Filelength)

       {

        //获取上传文件路径

        string strFileUploadPath = ConfigurationManager.AppSettings

["FileUplodePath"].ToString();

 

         //自定义文件名

          Random rd = new Random();

          int num1 = rd.Next(1000, 9999);

     string Fname = num1.ToString()+ name;//得到自定义文件名

     //合成物理路径

     string strFilePhysicalPath = strFileUploadPath+"//"+Fname;

                          

     hfc[i].SaveAs(strFilePhysicalPath);

     ShowMessageBox("文件上传成功");

          }

       else

        {

           ShowMessageBox("上传文件太大");

             break;

         }

       }

       else

          {

              ShowMessageBox("请选择合适文件上传");

                break;

           }

   }

  }

}

 

配置文件web.comfig设置

<appSettings>

<!文件类型设置-->

      <add key="FileTypeLimit" value=".jpg;.bmp;.gif;.png;.jpeg;.pdf;.rar;.xls;.doc;.txt"/>

<!文件上传路径设置-->

      <add key="FileUplodePath" value="F:// "/>

<!文件大小限制kb -->

      <add key="FileSizeLimit" value="1000"/>

</appSettings>

有了这些基本可以实现文件上传了

FileUpload基本就这些 现在重点看看SWfUpload控件

对于SWfUpload控件网上介绍很多这里我绝大多数也是引用 但重要的是怎样实现它的强大功能。

SWfUpload控件

        SWFUpload使用一个Flash影片来控制文件的选择和上传。此FLASH中包含一个用户自定制UI的按钮,点击该按钮能够激活

                 

        Flash本身的高级文件上传对话框,它能够根据用户的设置来进行单文件或者是多文件的上传。

 

SWFUpload4部分组成:

1.                 初始化和设置(Javascript)

2.                 JavaScript : SWFUpload.js

3.                  SWFUpload.swf(V2.2.0版本放弃了对flash 8的支持)

4.                 事件处理(Javascript)

 

      SWFpload必须在页面中初始化,一般可以在window.onload事件中完成此操作。它的构造函数需要一个Object类型的设置对象。 这个设置对象一般是一个直接定义的Object类型变量,直接传递给SWFUpload的构造函数。

       初始化的SWFUpload对象的引用需要保留下来,因为当显示文件选择对话框和启动文件上传的时候需要这个实例的

       引用。

      别的就不多说了,相关的介绍网上很多,可以自己查阅一下

 

      SWFUpload控件是个组件,自己使用时并没有实现上传图片的水印效果,只是实现了文件上传功能

       (嘿嘿学的比较浅薄)

  

               

   说一下主要步骤

    一、上传文件需要 要两个页面一个是Default.aspx 还有一个是upload.aspx

             在工程里添加新建项选文件夹 分别添加Flash jsimages 三个文件夹

 

             就我的理解简单说一下: Default页面主要进行页面初始化,而upload页面主要执行文件上传

             Flash文件夹中存放swfupload.swf 文件, js文件夹存放handlers.js swfupload.js文件,

          images文件夹主要存放按钮图片swfupload_uploadBtn.png(随便其他按钮图片也行要和初始化文件路径中的一致)

    二、以上所需文件都需要从网上下载下载一个SWFUpload组件的demo里面会包含我们所需的文件

           当然Default新建项目会有,upload页面需要自己去添加  

         

     提醒下两个页面最好不要从下载的SWFUploaddemo中附加 那样应该不能实现功能    

     Default.aspx代码

 

<head runat="server">

   <title></title>

       <scriptsrc="js/swfupload.js"type="text/javascript"></script>

 <script src="js/handlers.js" type="text/javascript"></script>

 <script type="text/javascript">

     var swfu;

     window.onload = function() {

         swfu = new SWFUpload({

             // 后台设置 

     upload_url: "upload.aspx", // 文件上传的处理程序,就是说,你要在这个文件对上传这

         个动作进行定义,比如文件保存、重命名之类的,

         //如果这个没有具体动作的话,文件不会在服务器上有任何踪迹,即文件不会上传。

 

             post_params: {

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

             },

 

             //文件上传设置

             file_size_limit: "2 MB", //上传大小 单位M

             file_types: "*.*", //上传文件类型

             file_types_description: "所有文件类型", //文件类型描述

             file_upload_limit: "0",    //一次性上传文件个数 0表示没有限制

 

             // 事件处理设置 - these functions as defined in Handlers.js

             file_queue_error_handler: fileQueueError,

             file_dialog_complete_handler: fileDialogComplete,

             upload_progress_handler: uploadProgress,

             upload_error_handler: uploadError,

             upload_success_handler: uploadSuccess,

             upload_complete_handler: uploadComplete,

 

             //按钮设置

//这里注意查看自己按钮图片路径是否正确             

button_image_url: "images/swfupload_uploadBtn.png",

             button_placeholder_id: "spanButtonPlaceholder",

             button_width: 200,

             button_height: 22,

             button_text: '<span class="button">Select File <span

                 class="buttonSmall">(2MB Max)</span></span>',

 

             button_text_style: '.button { font-family: Helvetica, Arial, sans

              -serif; font-size: 14pt; } .buttonSmall { font-size: 10pt; }',

 

             button_text_top_padding: 1,

             button_text_left_padding: 400,

 

             // Flash 设置查看自己flash文件路径是否正确

             flash_url: "../Flash/swfupload.swf", // Relative to this file

 

             custom_settings: {

                 upload_target: "divFileProgressContainer"

             },

             // Debug Settings

             debug: false

         });

     }

   </script>

</head>

<body>

    <form id="form1" runat="server">

    <div id="header">

         <h1 id="logo"><a href="../">SWFUpload</a></h1>

         <div id="version">v2.2.0</div>

      </div>

<div id="content">

       <div id="swfu_container" style="margin: 0px 10px;">

          <div>

            <span id="spanButtonPlaceholder"></span>

            </div>

<div id="divFileProgressContainer" style="height: 75px;"></div>

          </div>

      </div>

    </form>

</body>

    </html>

    

    后台文件不需要设置

    下面设置upload.aspx.cs后台方法

 

     protected void Page_Load(object sender, EventArgs e)

  {

  #region

        try

  {

      // Get the data

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

      //获取上传文件后缀

          string FileExtension= jpeg_image_upload.FileName.Substring

          (jpeg_image_upload.FileName.LastIndexOf("."),

           jpeg_image_upload.FileName.Length-

           jpeg_image_upload.FileName.LastIndexOf("."));

 

      //自定义文件名称

   Random rd = new Random();

   int num1 = rd.Next(1000, 9999);

  string Filename=  num1.ToString()+ FileExtension;

  //文件上传路径 配置文件中设置 与FileUpload控件道理相同

  string FileUploadPath = ConfigurationManager.AppSettings["FileUploadPath"];

 //文件上传

                jpeg_image_upload.SaveAs(FileUploadPath+Filename);

 

     Response.StatusCode = 200;

     Response.Write("文件处理完毕!");

  }

  catch

    {

     // If any kind of error occurs return a 500 Internal Server

error

                Response.StatusCode = 500;

                Response.Write("未知错误!");

            }

            finally

            {

                // Clean up

                Response.End();

            }

            #endregion

     }

     算是勉强写完了,可能还有些疏漏,不过大方向还是可以的

原创粉丝点击