天天看點

Asp.net中關于上傳檔案的各項基本操作

在常見的B/S模式下企業級架構中上傳檔案是一個常見業務操作.在.NET 1.1版本是隻有對應的用戶端HTML版本的Input<Type="File">,在.NET2.0版本添加進來了伺服器端的FileUpload控件.

其實考慮在設計這個控件時為了保證.NET安全機制.預設設定是檔案上傳的大小是2M. 當然可以通過修改系統的Web.Config配置檔案達到4M. 其實相對而言Fileupload是一把雙刃劍.使用時揚長避短是很重要的.

開發者應該了解的是,之是以預設的檔案大小上限為4MB,并不是因為當時的設計人員靈光一現,而是為了避免潛在DOS攻擊危險。若是攻擊者送出了一個或多個大檔案,往往會讓伺服器不堪重負。若是使用者上傳的檔案大于4MB,将會得到“Maximum request length exceeded.”異常資訊. 當然這些就涉及到Asp.net平台下大檔案上傳的問題作為下一節讨論并實作. 本章主要實作的是利用Asp.net中FileUpload控制的一些基本操作.

最近裝上VS2010 Beta2版本. NET FrameWork 4.0.(關系不大)試用一下.以下的項目編碼都在該環境下運作.

(A):簡單檔案上傳操作 頁面代碼:

--前台一個上傳控件  接着是一個上傳按鈕  

 <asp:FileUpload ID="FileUpload5" runat="server" Width="475px"></asp:FileUpload>  

 <asp:Button ID="TestFileType" runat="server" Text="上傳檔案-判斷檔案類型"   

            onclick="TestFileType_Click" OnClientClick="CheckFileType()" ></asp:Button> 

背景Button時間操作代碼:

//向伺服器上傳檔案-BasicOperatorDemo(基本操作示範) -最簡單操作  

   //Author:chenkai Date:2009年11月10日14:22:36  

        protected void bt_upload_Click(object sender, EventArgs e)  

        {  

            try {  

                if (FileUpload1.PostedFile.FileName == "")  

                {  

                    this.lb_info.Text = "請選擇您要上傳的檔案!";  

                }  

                else 

                    string filepath = FileUpload1.PostedFile.FileName.ToString();  

                    string filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);  

                    string serverpath = HttpContext.Current.Server.MapPath("Images/") + filename;  

                    //儲存到伺服器上   判斷檔案目錄是否存在  

                    if (File.Exists(serverpath))  

                    {  

                        FileUpload1.SaveAs(serverpath);  

                        this.lb_info.Text = "檔案上傳成功!";  

                    }  

                    else 

                        //建立儲存目錄  

                        File.Create(serverpath);  

            }  

            catch (Exception se)  

            {  

                this.lb_info.Text = "上傳過程發生錯誤!錯誤原因:" + se.ToString();  

        } 

再次逐漸的提高要求: A:限制用戶端上傳檔案的檔案類型. 隻能上傳制定的.JPG/.Jpeg/.chm 3種類型的檔案. 用戶端驗證模式:

<Script language="JavaScript" Type="JS/Text">  

        //定義一個用戶端JS函數來判斷上傳檔案的類型 在Button onClintClick事件調用  

        function CheckFileType() {  

            //盡然可以直接調用伺服器端控件  

            var str = document.getElementById("FileUpload5").value;  

            alert(str);  

         var pos = str.lastIndexOf(".");  

         var lastname = str.substring(pos,str.length)    

        if (lastname.toLowerCase()!=".jpg" && lastname.toLowerCase()!=".gif")  

         {  

             alert("您上傳的檔案類型為"+lastname+",圖檔必須為.jpg,.gif類型");  

             return false;  

         }  

       else   

             return true;  

        }  

    </Script> 

上傳制定檔案類型伺服器端驗證模式:

/// <summary>  

        /// 檢測真正的上傳檔案類型資料  

        /// Author:chenkai  Date:2009年11月11日10:44:26  

        /// </summary>  

        public bool CheckClintFileType(FileUpload getfile)  

            //獲得資料  

            System.IO.FileStream getstream=new FileStream(getfile.FileName,FileMode.Open,FileAccess.Read);  

            System.IO.BinaryReader getreader = new BinaryReader(getstream);  

            string fileclass = string.Empty;  

            byte buffer;  

            try  

                //讀取的檔案流轉化成二進制檔案  

                buffer = getreader.ReadByte();  

                fileclass = buffer.ToString();  

                //再次疊加 

本文轉自chenkaiunion 51CTO部落格,原文連結:http://blog.51cto.com/chenkai/765300

繼續閱讀