日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET文件上传和下载

發布時間:2025/6/15 asp.net 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET文件上传和下载 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ?

? ? ? ?大學最近作出相關的需求進行上傳和下載文件的網站(求為:站點發布的通知,在后臺要能給每一個通知加入附件。在前臺要能顯示并下載附件),之前僅僅是學習過關于上傳的 理論知識,這里實踐了一下下,與大家分享一下成果。

? ? ? ?事先說明:這個樣例採用的是簡單的三層結構,層與層之間是用實體來傳值。

并且這樣的方法不但在本地測試時能夠成功,并且能夠部署在server上,供異地上傳和下載文件。


? ? ? ?專門做了一個數據庫表用來存儲附件的相關信息:??

字段說明
AnnexID附件ID
AnnexName附件名稱
AnnexAddress存儲附件的地址
NoticeID附件所屬“通知”的ID

? ? ? ?ASP.NET實現上傳文件

? ? ? ?前端

? ? ? ?界面十分簡單。僅僅是放一個file類型的<input>和一個button,而且為這個button加入點擊事件(btnUpLoad_Click),例如以下圖:

? ? ? ? ? ?

? ? ? ?代碼:? ? ?

<input id="UpLoad" type="file" runat="server" /><asp:Button runat="server" Text="上傳" ID="btnUpLoad" OnClick="btnUpLoad_Click" />


? ? ? ?后臺

? ? ? ?再就是在后臺編寫上傳button點擊事件UpLoad_Click里的代碼,先大體說一下思路:

? ? ? ?1、依據file類型的<input>控件獲得將要上傳文件在本機的物理路徑。

? ? ? ?2、在這個物理路徑中用截取字符串的方法獲得文件名稱(第一步中取得的路徑為本機的絕對路徑,在server上是無效的,所以這里我們僅僅須要獲取文件名稱)。

? ? ? ?3、利用file類型的<input>控件屬性PostedFile的SaveAs()方法將對應文件存儲到server中指定的目錄中。

? ? ? ?核心代碼:

protected void btnUpLoad_Click(object sender, EventArgs e){//取出所選文件的本地路徑string fullFileName = this.UpLoad.PostedFile.FileName;//從路徑中截取出文件名稱string fileName = fullFileName.Substring(fullFileName.LastIndexOf("\\") + 1);//限定上傳文件的格式string type = fullFileName.Substring(fullFileName.LastIndexOf(".") + 1);if (type == "doc" || type == "docx" || type == "xls" || type == "xlsx" || type == "ppt" || type == "pptx" || type == "pdf" || type == "jpg" || type == "bmp" || type == "gif" || type == "png" || type == "txt" || type == "zip" || type == "rar"){//將文件保存在server中根文件夾下的files文件夾中string saveFileName = Server.MapPath("/files") + "\\" + fileName;UpLoad.PostedFile.SaveAs(saveFileName);Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('文件上傳成功。');</script>");//向數據庫中存儲對應通知的附件的文件夾BLL.news.InsertAnnexBLL insertAnnex = new BLL.news.InsertAnnexBLL();AnnexEntity annex=new AnnexEntity(); //創建附件的實體annex.AnnexName=fileName; //附件名annex.AnnexContent=saveFileName; //附件的存儲路徑annex.NoticeId = noticeId; //附件所屬“通知”的ID在這里為已知insertAnnex.InsertAnnex(annex); //將實體存入數據庫(事實上就是講實體的這些屬性insert到數據庫中的過程。詳細BLL層和DAL層的代碼這里不再多說)}else{Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('請選擇正確的格式');</script>");}}



? ? ? ? ??ASP.NET實現下載文件

? ? ? ?上述操作已經能夠實現將一個個附件存入數據庫,在數據庫中存儲的情況給大家截了個圖:

? ? ? ? ? ??

? ? ? ?以下就要把這些附件在頁面上顯示,頁面顯示效果為:

? ? ? ??

? ? ? ?點擊附件,瀏覽器提示下載:

? ? ? ?

?

? ? ? ?前臺: ? ? ??

? ? ? ?依照需求來說,每則公布的通知能夠包括若干個附件,所一前臺用了repeter控件來顯示多個附件: ? ?

? ? ? ?代碼:

<asp:Repeater ID="rptAnnex" runat="server"><ItemTemplate><%--為repeter加入序號--%>附件:<%#Container.ItemIndex + 1 %> <asp:LinkButton ID="lbtnDownLoad" runat="server" OnCommand="lbtnDownLoad_Command" CommandArgument="<%#((Model.AnnexEntity)Container.DataItem).AnnexContent %>"><%#((Model.AnnexEntity)Container.DataItem).AnnexName %></asp:LinkButton><br /></ItemTemplate></asp:Repeater>


? ? ? ? ? ?后臺

? ? ? ?ASP.NET能夠採用多種方式下載文件(詳情可參考《ASP.NET下載文件的幾種方式》),這里採用了流式的下載方式(參考文章《Asp.net下載實例》):? ? ??

using System.IO;protected void lbtnDownLoad_Command(object sender, CommandEventArgs e){// 定義文件名稱 string fileName = "";// 獲取文件在server的地址 string url = e.CommandArgument.ToString();// 推斷傳輸地址是否為空 if (url == ""){// 提示“該文件暫不提供下載” Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script defer>alert('該文件暫不提供下載!

');</script>"); return; } // 推斷獲取的是否為地址。而非文件名稱 if (url.IndexOf("\\") > -1) { // 獲取文件名稱 fileName = url.Substring(url.LastIndexOf("\\") + 1); } else { // url為文件名稱時,直接獲取文件名稱 fileName = url; } // 以字符流的方式下載文件 FileStream fileStream = new FileStream(@url, FileMode.Open); byte[] bytes = new byte[(int)fileStream.Length]; fileStream.Read(bytes, 0, bytes.Length); fileStream.Close(); Response.ContentType = "application/octet-stream"; // 通知瀏覽器下載 Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName); Response.BinaryWrite(bytes); Response.Flush(); Response.End(); }

? ? ? ? ??

? ? ? ? ?控制上傳文件的大小??? ?

? ? ? ?前面的兩個步驟基本上已經能夠實現文件的上傳和下載。除了這些,還須要控制上傳文件的大小,默認情況下上傳文件限制大小為4M,這里能夠在配置文件web.config中改動,在httpRuntime節點中增加例如以下屬性就可以:? ??

<configuration><system.web> <httpRuntime executionTimeout="300" maxRequestLength="51200" useFullyQualifiedRedirectUrl="false" /></system.web> </configuration>? ? ? ??executionTimeout 屬性的值是 ASP.NET 關閉前同意發生的上載秒數,maxRequestLength指限制上傳文件的大小,useFullyQualifiedRedirectUrl指示client重定向是否是全然限定的,或者指示是否代之以將相對重定向發送到client。

? ? ? ??

? ? ? ?到這里就大功告成了,歡迎分享更好的方法!

? ? ? ?

版權聲明:本文博客原創文章。博客,未經同意,不得轉載。

總結

以上是生活随笔為你收集整理的ASP.NET文件上传和下载的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。