.net 服务器控件实现文件上传

来源:互联网 发布:淘宝网伴娘礼服 编辑:程序博客网 时间:2024/05/01 10:50

最近在做项目的时候,需要上传文件,包括图片和视频,网上找了很多方法,最后选了一种比较适合需要的。主要使用的是一种服务器控件,FileUpload。

1.在页面上拉过啦FileUpload控件,设置一个上传按钮。

                  

<span style="font-family:KaiTi_GB2312;font-size:18px;">          <asp:FileUpload ID="FileUpload1" runat="server" />                   //上传控件 <asp:Button ID="FileUpload " runat="server" Text="上传"  OnClientClick="checkform()" OnClick ="FileUpload _Click"/>   //上传按钮</span>

2.前台js验证

<span style="font-family:KaiTi_GB2312;font-size:18px;"> function checkform() {         var strs = document.getElementById("FileUpload1").value;         if (strs == "") {             alert("请选择要上传的图片!");             return false;         }         var n1 = strs.lastIndexOf('.') + 1;         var fileExt = strs.substring(n1, n1 + 3).toLowerCase()         if (fileExt != "jpg" && fileExt != "bmp" && fileExt != "png" && fileExt != "avi") {             alert('目前系统仅支持jpg、bmp、png后缀图片上传!');             return false;         }  }</span>

在上面的代码中有一个OnClientClick(),刚开始在前台js中写了代码,但是就是不走js代码,一直感觉没有问题啊。后来经过查询和寻求帮助,才知道,我们写的应该是OnClientClick,不应该是Click,两者有什么区别呢?OnClientClick是客户端脚本,一般使用javascript,在客户端,也就是IE中运行,点击后马上执行。OnClick是服务器端事件处理函数,使用C#或者vb.net,在服务器端,也就是IIS中运行,点击按钮后,执行postback,之后再运行。

3.后台Click事件代码。

因为内容嵌套比较多,所以可以先看一下真个代码的思路,特别清晰。


下面是具体的代码:

 

<span style="font-family:KaiTi_GB2312;font-size:18px;">  protected void Button1_Click(object sender, EventArgs e)        {            #region 文件不存在,创建文件夹            if (!System.IO.Directory.Exists(Server.MapPath(upPath)))            {                //不存在,创建文件                System.IO.Directory.CreateDirectory(Server.MapPath(upPath));            }            if (FileUpload1.FileName == "")            {                ClientScript.RegisterStartupScript(GetType(), "", "<script>alert('请选择你要上传的文件!');</script>");            }            #endregion            if (FileUpload1.HasFile)            {                #region 获取文件类型,设置可容文件大小                int upLength = 8;        //上传文件大小                System.IO.FileInfo fi = new System.IO.FileInfo(FileUpload1.FileName);                string fileContentType = FileUpload1.PostedFile.ContentType;    //文件类型                #endregion                  //设置可以上传文件的类型,自己根据需要设置               if (fi.Extension.ToLower() == ".avi" || fi.Extension.ToLower() == ".gif" || fi.Extension.ToLower() == ".flv" || fi.Extension.ToLower() == ".mp4" || fi.Extension.ToLower() == ".jpg" || fi.Extension.ToLower() == ".bmp" || fi.Extension.ToLower() == ".JPEG" || fi.Extension.ToLower() == ".png")                {                    #region  获取路径,根据条件给文件重新命名                    string name = FileUpload1.PostedFile.FileName; // 客户端文件路径                    System.IO.FileInfo file = new System.IO.FileInfo(name);                    //去掉IP中间的点号                    string str = txtIP.Text;                    string result = str.Replace(".", "");                    //生成新的文件夹:IP+时间+文件格式                    string fileName = result + DateTime.Now.ToString("yyyyMMddhhmmssfff") + file.Extension; // 文件名称,当前时间(yyyyMMddhhmmssfff)                    string webFilePath = Server.MapPath(upPath) + fileName; // 服务器端文件路径                    string FilePath = upPath + fileName;   //页面中使用的路径                    #endregion                    if (!System.IO.File.Exists(webFilePath))                    {                        #region   文件大小是否超过限制                        if ((FileUpload1.FileBytes.Length / (1024 * 1024)) > upLength)                        {                            ClientScript.RegisterStartupScript(this.GetType(), "upfileOK", "alert('大小超出 " + upLength + " M的限制,请处理后再上传!');", true);                            // return "null";                        }                        #endregion                        #region try 判断是否上传成功                        try                        {                            FileUpload1.SaveAs(webFilePath);  // 用 SaveAs 方法保存文件                            ClientScript.RegisterStartupScript(this.GetType(), "upfileOK", "alert('提示:文件上传成功');", true);                            //获取文件路径,显示在文件名称文本框中                            txtPictureName.Text = upPath+fileName;                        }                        catch (Exception ex)                        {                            ClientScript.RegisterStartupScript(this.GetType(), "upfileOK", "alert('提示:文件上传失败" + ex.Message + "');", true);                        }                        #endregion                    }                    else                    {                        #region 判断文件是否已经存在                        ClientScript.RegisterStartupScript(this.GetType(), "upfileOK", "alert('提示:文件已经存在,请重命名后上传');", true);                    }                        #endregion                }                else                {                    #region 判断文件类型是否相符                    ClientScript.RegisterStartupScript(this.GetType(), "upfileOK", "alert('提示:文件类型不符');", true);                    #endregion                }            }        }</span>


通过以上的代码就可以成功实现文件上传的功能了。可以上传图片、文档、相关设置的视频,类型可以通过自己的设置。


   







0 0