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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET文件上传和下载

發(fā)布時(shí)間:2025/6/15 asp.net 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET文件上传和下载 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ?

? ? ? ?大學(xué)最近作出相關(guān)的需求進(jìn)行上傳和下載文件的網(wǎng)站(求為:站點(diǎn)發(fā)布的通知,在后臺(tái)要能給每一個(gè)通知加入附件。在前臺(tái)要能顯示并下載附件),之前僅僅是學(xué)習(xí)過關(guān)于上傳的 理論知識(shí),這里實(shí)踐了一下下,與大家分享一下成果。

? ? ? ?事先說明:這個(gè)樣例採用的是簡(jiǎn)單的三層結(jié)構(gòu),層與層之間是用實(shí)體來傳值。

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


? ? ? ?專門做了一個(gè)數(shù)據(jù)庫表用來存儲(chǔ)附件的相關(guān)信息:??

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

? ? ? ?ASP.NET實(shí)現(xiàn)上傳文件

? ? ? ?前端

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

? ? ? ? ? ?

? ? ? ?代碼:? ? ?

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


? ? ? ?后臺(tái)

? ? ? ?再就是在后臺(tái)編寫上傳button點(diǎn)擊事件UpLoad_Click里的代碼,先大體說一下思路:

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

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

? ? ? ?3、利用file類型的<input>控件屬性PostedFile的SaveAs()方法將對(duì)應(yīng)文件存儲(chǔ)到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>");//向數(shù)據(jù)庫中存儲(chǔ)對(duì)應(yīng)通知的附件的文件夾BLL.news.InsertAnnexBLL insertAnnex = new BLL.news.InsertAnnexBLL();AnnexEntity annex=new AnnexEntity(); //創(chuàng)建附件的實(shí)體annex.AnnexName=fileName; //附件名annex.AnnexContent=saveFileName; //附件的存儲(chǔ)路徑annex.NoticeId = noticeId; //附件所屬“通知”的ID在這里為已知insertAnnex.InsertAnnex(annex); //將實(shí)體存入數(shù)據(jù)庫(事實(shí)上就是講實(shí)體的這些屬性insert到數(shù)據(jù)庫中的過程。詳細(xì)BLL層和DAL層的代碼這里不再多說)}else{Page.ClientScript.RegisterStartupScript(Page.GetType(), "message", "<script language='javascript' defer>alert('請(qǐng)選擇正確的格式');</script>");}}



? ? ? ? ??ASP.NET實(shí)現(xiàn)下載文件

? ? ? ?上述操作已經(jīng)能夠?qū)崿F(xiàn)將一個(gè)個(gè)附件存入數(shù)據(jù)庫,在數(shù)據(jù)庫中存儲(chǔ)的情況給大家截了個(gè)圖:

? ? ? ? ? ??

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

? ? ? ??

? ? ? ?點(diǎn)擊附件,瀏覽器提示下載:

? ? ? ?

?

? ? ? ?前臺(tái): ? ? ??

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

? ? ? ?代碼:

<asp:Repeater ID="rptAnnex" runat="server"><ItemTemplate><%--為repeter加入序號(hào)--%>附件:<%#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>


? ? ? ? ? ?后臺(tái)

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

using System.IO;protected void lbtnDownLoad_Command(object sender, CommandEventArgs e){// 定義文件名稱 string fileName = "";// 獲取文件在server的地址 string url = e.CommandArgument.ToString();// 推斷傳輸?shù)刂肥欠駷榭? 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為文件名稱時(shí),直接獲取文件名稱 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(); }

? ? ? ? ??

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

? ? ? ?前面的兩個(gè)步驟基本上已經(jīng)能夠?qū)崿F(xiàn)文件的上傳和下載。除了這些,還須要控制上傳文件的大小,默認(rèn)情況下上傳文件限制大小為4M,這里能夠在配置文件web.config中改動(dòng),在httpRuntime節(jié)點(diǎn)中增加例如以下屬性就可以:? ??

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

? ? ? ??

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

? ? ? ?

版權(quán)聲明:本文博客原創(chuàng)文章。博客,未經(jīng)同意,不得轉(zhuǎn)載。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。