在VS.NET下创建文件上载控件

创建|控件

在VS.NET下创建文件上载控件

前言:
还记得在asp3.0里,我们为了上载文件可真是煞费苦心,写了一大堆的代码,可执行起来还是那么慢。但在asp.net里这个问题可以轻松搞定,这篇文章我们就探讨如何建立一个用户自定义的文件上载控件,并在我们的.ASPX程序中使用它。
正文
第一步:开发自定义文件上载控件
打开VS.NET,建立一个工程:WebApp,我们使用WebApp项目来做我们的工作。在项目WebApp上点右健选择Add下的Add Web User Control…,这时我们就可以建立一个用户自定义控件():FileUp.ascx,注意这个文件的扩展名是:.ascx。添加过程如下图所示:
图:添加用户自定义控件

图:添加用户自定义控件
我们建立FileUpload.ascx文件后,就可以象布置.html页面一样来设置布局。我们这个项目是要建立一个用户自定义的文件上载控件,在一个上载控件中有三个必备的元素,从某种意义上讲也可以说是“对象”:取得将要上载文件的HtmlInputFile控件、保存文件名的TextBox控件、按钮Button控件。我们可以使用VS.NET的工具箱里的File Field来直接添加它(看,VS.NET充分考虑了我们的需求),并把它的Runat属性设为Server,来告诉程序“我要在服务器上运行它”。为了体会ASP.NET为我们带来的优势,我们使用服务器端Web控件:TextBox和Button。控件的布局如下:

图:控件布局
界面设计完成以后,我们需要进一步设置各个控件的属性,主要有控件的ID,TEXT等,这里需要强调的关键有两点:一是HtmlInputFile控件的runat值:server;另外一个是Form表单的enctype属性:multipart/form-data,以支持多部分MIME数据上载。FileUpload.ascx文件的html代码如下:
FileUp.ascx
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="FileUp.ascx.cs" Inherits="WebApp.FileUp"%>

<HTML>
    <HEAD>
    </HEAD>
    <body>
        <!-- Add HTML Content and Server Controls. Do not add server
        <form>
        tags. -->
        <form enctype="multipart/form-data" runat=server method=post id=form1>
            <TABLE cellSpacing=1 cellPadding=1 width=400 border=0 height=151>
                <TR>
                    Selecte File To Upload:
                    <input type=file id=FileName runat="server" NAME="FileName"/>
                    </TD>
                </TR>
                <TR>
                    <TD style="HEIGHT: 27px">
                        Save The Name As:<asp:TextBox id=txtSaveName runat="server" Height="24px" Width="130px"></asp:TextBox></TD>
                </TR>
                <TR>
                    <TD valign=center align=right>
                        <asp:Button id=btnUplod runat="server" Text="Send File" height="24px" width="93px">
                        </asp:Button>  
                    </TD>
                </TR>
                <TR>
                    <TD valign=top>
                        <asp:Label id=lblStatusC runat="server" Height="33px" Width="383px">
                        </asp:Label>
                    </TD>
                </TR>
            </TABLE>
        </form>
    </body>
</HTML>
接下来,我们进行文件上载的处理工作。在.ascx页面上我们双击Button按钮,或者右键文件名FileUpload.ascx选择View Code,就可进入.ascs.cs文件,进行我们的编程工作。
ASP.NET为我们封装了丰富的编程接口,减少了编程的工作量。并且,我们不需要知道这些接口内部的工作原理,我们只要知道一个类的属性、方法等的用法就能进行快速的开发。
ASP.NET为我们提供了一个System.Web名字空间,System.Web名字空间提供了基于browser/server系统的类和接口。我们的文件上载控件就要使用其中的HttpPostedFile类,所以我们首先了解HttpPostedFile类的一些相关的属性和方法。
属性:
ContentLength    取得将要上载文件的字节数,也就是文件的大小
ContentType    客户端文件的MIME类型
FileName    上载文件的文件名
InputStream    建立一个Stream对象,指向将要读取文件的内容
方法:
GetType    取得当前实例的文件类型
SaveAs    把MIME消息体作为文件保存在服务器
ToString    返回当前对象的表现
熟悉以上的属性和方法后,我们就开始开发我们的文件上载控件。为了便于读者理解,我们首先看代码,完整代码如下:
FileUp.ascx.cs:
namespace WebApp
{
    using System;
    using System.IO;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;

    /// <summary>
    ///        Summary description for FileUp.
    /// </summary>
    public class FileUp : System.Web.UI.UserControl
    {
        protected System.Web.UI.WebControls.Button btnUplod;
        protected System.Web.UI.WebControls.Label lblStatusC;
        protected System.Web.UI.HtmlControls.HtmlInputFile FileName;
        protected System.Web.UI.WebControls.TextBox txtSaveName;
        protected string uploadFolder = "c:\\temp\\";

         /// <summary>
        ///        
        /// </summary>
        public FileUp()
        {
            this.Init += new System.EventHandler(Page_Init);
        }

        private void Page_Load(object sender, System.EventArgs e)
        {
            // Put user code to initialize the page here            
        }

        private void Page_Init(object sender, EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
        }

        #region Web Form Designer generated code
        ///        Required method for Designer support - do not modify
        ///        the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.btnUplod.Click += new System.EventHandler(this.btnUplod_Click);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        private void btnUplod_Click(object sender, System.EventArgs e)
        {
            if (txtSaveName.Text.ToString() =="")
            {
                lblStatusC.Text = "没有选择另存为的文件名称";
                return;
            }    

            if (FileName.PostedFile != null)
            {
                
                string strFileInfo = "File Name: "+
                                     FileName.PostedFile.FileName +
                                     "File Type: "+
                                     FileName.PostedFile.ContentType +
                                      "File Length:"+
                                     FileName.PostedFile.ContentLength ;
                try
                {
                    FileName.PostedFile.SaveAs("uploadFolder"+txtSaveName.Text.ToString());
                    lblStatusC.Text = "File uploaded successfully:"+strFileInfo;                    
                }
                catch(Exception ee)
                {
                    lblStatusC.Text = "File uploaded error:"+ee.ToString();
                }
            }
        }
    
    }
}
让我们来逐行分析程序。
程序开始是一个名字空间的声明:namespace WebApp 这是系统根据项目自动生成的,我们可以手动更改它,或者删除它,但作者不建议删除名字空间,使用名字空间是一个良好的编程模式,便于以后的扩展工作。
    using System;
    using System.IO;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
上面的代码为程序引入了我们需要的类,当然如果不怕以后麻烦也可以不首先引用,而在使用每个类时都写入名字空间。比如我们要使用刚才介绍的HttpPostedFile 类的PostedFile.SaveAs方法,我们就要这样写了:System.Web.UI.HtmlControls.PostedFile.SaveAs(),是不是很烦?
FileUp : System.Web.UI.UserControl
说明FileUp类继承了System.Web.UI.UserControl类。
        protected System.Web.UI.WebControls.Button btnUplod;
        protected System.Web.UI.WebControls.Label lblStatusC;
        protected System.Web.UI.HtmlControls.HtmlInputFile FileName;
        protected System.Web.UI.WebControls.TextBox txtSaveName;
        protected string uploadFolder = "c:\\temp\\";
上面的代码定义了btnUplod、lblStatusC等几个实例。
下面我们着重分析btnUplod_Click事件,当用户点击“Send File”按钮时程序调用该事件。
            if (txtSaveName.Text.ToString() =="")
            {
                lblStatusC.Text = "没有选择另存为的文件名称";
                return;
            }    
这里检验用户是否输入了将要保存的文件名,如果没有则返回。
    if (FileName.PostedFile != null)
            {
                
                string strFileInfo = "File Name: "+
                                     FileName.PostedFile.FileName +
                                     "File Type: "+
                                     FileName.PostedFile.ContentType +
                                      "File Length:"+
                                     FileName.PostedFile.ContentLength ;
                try
                {
                    FileName.PostedFile.SaveAs("uploadFolder"+txtSaveName.Text.ToString());
                    lblStatusC.Text = "File uploaded successfully:"+strFileInfo;                    
                }
                catch(Exception ee)
                {
                    lblStatusC.Text = "File uploaded error:"+ee.ToString();
                }
            }
这段代码在用户已选择了文件后才能执行,strFileInfo保存了文件的相关信息,读者可以看看HttpPostedFile类相关属性的使用。使用try{…}catch{…}监测程序,并输出错误信息,使用SaveAs方法将文件保存到服务器。
到现在为止,我们已成功的建立了一个文件上载控件。那么在别的.aspx程序中使用它呢?
使用自定义文件上载控件
使用任何的自定义控件我们都需要使用 Register 指令,相关用法这里就不做详细的介绍了,读者可以参考SDK熟悉它的用法。我们先看代码:
ControlTest.aspx:
<%@ Page language="c#" Codebehind="ControlTest.aspx.cs" AutoEventWireup="false" Inherits="WebApp.ControlTest" %>
<%@ Register TagPrefix="Test" TagName="FileUpload" Src="FileUp.ascx" %>

<HTML>
    <HEAD>
        <meta content="Microsoft Visual Studio 7.0" name=GENERATOR>
        <meta content=C# name=CODE_LANGUAGE>
        <meta content=JScript name=vs_defaultClientScript>
        <meta content="Internet Explorer 5.0" name=vs_targetSchema>
    </HEAD>
    <body MS_POSITIONING="GridLayout">
        <Test:con runat="server" id=Con1>
        </Test:con>
    </body>
</HTML>
你看:
        <Test:con runat="server" id=FielUpload>
        </Test:con>
就这么简单!需要提示的是在<Test:con runat="server" id=FielUpload></Test:con>外面不能再有<form>标签了,否则不能编译成功。
好了,让我们看一下我们的执行结果吧!

图:执行结果
注:该程序在Win2000+SDK(2728)环境下测试通过

时间: 2024-11-03 18:48:33

在VS.NET下创建文件上载控件的相关文章

三星Note5如何在标准模式下创建文件夹

若需要在标准模式下创建文件夹,请按以下步骤操作:  1.在标准模式下,点住一个应用程序图标,将其拖动到另一个应用程序图标.    2.当应用程序图标上出现文件夹框架时松手,这时包含此两个应用程序图标的文件夹就创建成功了.    3.输入文件夹名称.    4.输入文件夹名称后,点击[调色盘]图标可以更改文件夹颜色.    5.选择您喜欢的颜色.    6.文件夹颜色已更改.    7.在标准模式下,新的文件夹已创建.若需将更多应用程序放入文件夹中,只需将应用程序点住拖动到文件夹即可.     

[转]利用ASP.NET 2.0创建自定义Web控件(2)

原址:http://hi.baidu.com/sjbh/blog/item/5a8298454403a321cffca39c.html   如何生成的? Render() 方法基本上控制着 WebControl 的整个输出.默认情况下,Render() 方法实际上会依次调用 RenderBeginTag().RenderContents() 以及 RenderEndTag().尽管在 ASP.NET 1.x 中调用结构并未变化,但由于该呈现模型,修改这些调用的影响却发生了变化. 您可以覆盖 Re

详细阐述利用ASP.NET 2.0创建自定义Web控件开发说明

asp.net|web|创建|控件|控件开发 简介 从使用基本的文本编辑器到创作标记页面,Web 开发已经经历了一个漫长的过程.目前,集成开发环境 (IDE) 为开发过程中的几乎每个方面都提供了图形化表示形式.此外,还实现各种说明性编程技术以提高效率并降低出现错误的几率.Visual Studio 2005 和 ASP.NET 2.0 中的控件体系结构遵循了这些编程趋势,并且提供了可靠的.可扩展的环境,该环境设计为使开发人员可以创建能够以说明方式配置的控件. 此外,ASP.NET 中新的自适应呈

在VB6中动态创建使用ADO控件访问数据库

ado|创建|动态|访问|控件|数据|数据库 使用ADO控件可以方便的在VB6中访问ODBC数据库,但是通过直接放置ADODS控件来获得ADO的数据连接比较麻烦,我们可以在VB工程中创建一个公共数据模块,将ADO控件的初始化.建立连接.关闭连接等操作都写到函数中,这样就可以在工程的其他模块中共享调用这个ADO连接. 一次完整的ADO调用操作分为如下几个步骤: 打开ADO到数据库的连接,初始化ADO RECORDSET集. 通过写入SQL语句执行查询并返回查询结果RECORDSET集:或者可以通过

利用 ASP.NET 2.0 创建自定义 Web 控件

asp.net|web|创建|控件 Jayesh Patel.Bryan Acker.Robert McGovernInfusion Development适用于:Microsoft ASP.NET 2.0Microsoft Visual Studio 2005 摘要:ASP.NET 2.0 中新的自适应呈现模型为控件编写人员提供了很多新的选项.本文展示了这些选项如何使创建 ASP.NET 的自定义控件变得比以前更加容易. 本页内容 简介 自适应呈现模型 创建自定义服务器控件 TagKey 使用

利用ASP.NET 2.0创建自定义Web控件

asp.net|web|创建|控件 从使用基本的文本编辑器到创作标记页面,Web 开发已经经历了一个漫长的过程.目前,集成开发环境 (IDE) 为开发过程中的几乎每个方面都提供了图形化表示形式.此外,还实现各种说明性编程技术以提高效率并降低出现错误的几率.Visual Studio 2005 和 ASP.NET 2.0 中的控件体系结构遵循了这些编程趋势,并且提供了可靠的.可扩展的环境,该环境设计为使开发人员可以创建能够以说明方式配置的控件. 此外,ASP.NET 中新的自适应呈现模型减少了编写

利用ASP改进文档上载控件

控件 随着互联网的发展,人们发布和获取信息的方式发生了根本的变化,越来越多的人开始把网络作为最重要的发布和获取信息的途径,同时,能发布并令信息共享的技术也越来越多.虽然这些技术为开发人员带来了极大的便利,但是由于种种原因,其中有些技术还存在着这样或那样的缺陷.因此,开发人员在选择和使用各种技术时,一定要认清这些技术的优点和局限性,取长补短,才能设计出功能完善的程序. 提出问题 笔者曾在建设企业内部信息网工程中开发过基于Web的文档资源共享信息网站.该网站要求上载的文档能自动在主页中根据文档的类别

利用ASP改进文档上载控件 (转)

控件 利用ASP改进文档上载控件 随着互联网的发展,人们发布和获取信息的方式发生了根本的变化,越来越多的人开始把网络作为最重要的发布和获取信息的途径,同时,能发布并令信息共享的技术也越来越多.虽然这些技术为开发人员带来了极大的便利,但是由于种种原因,其中有些技术还存在着这样或那样的缺陷.因此,开发人员在选择和使用各种技术时,一定要认清这些技术的优点和局限性,取长补短,才能设计出功能完善的程序. 提出问题 笔者曾在建设企业内部信息网工程中开发过基于Web的文档资源共享信息网站.该网站要求上载的文档

mscomm32 ocx-windows7下调用MSCOMM32.OCX控件失败

问题描述 windows7下调用MSCOMM32.OCX控件失败 目的: 在JSP页面中调用MSCOMM32.OCX控件处理串口打印,打印机用的是EPSON TM-T81小票打印机,在XP中通过IE访问调试通过,可以正常打印,在win7下打印失败,现希望在win7下可以正常打印 已处理的问题 MSCOMM32.OCX已拷贝至C:WindowsSysWOW64下 已在C:WindowsSysWOW64下执行 regsvr32 MSCOMM32.OCX注册成功 已在注册表注入如下内容 [-HKEY_