生活随笔
收集整理的這篇文章主要介紹了
                                
asp文件上传和下载
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
 
                                
                            
                            
                            ASP.NET實現上傳文件
 
? ? ? ?前端
 
? ? ? ?界面十分簡單,只是放一個file類型的<input>和一個按鈕,并且為這個按鈕添加點擊事件(btnUpLoad_Click),如下圖:
 
? ? ? ? ? ?
 
? ? ? ?代碼:? ? ?
 
?
 
[html]?view plain?copy?
 
<input?id="UpLoad"?type="file"?runat="server"?/>??<asp:Button?runat="server"?Text="上傳"?ID="btnUpLoad"?OnClick="btnUpLoad_Click"?/>??
?
 
?
 
?
 
? ? ? ?后臺
 
? ? ? ?再就是在后臺編寫上傳按鈕點擊事件UpLoad_Click里的代碼,先大體說一下思路:
 
? ? ? ?1、根據file類型的<input>控件獲得將要上傳文件在本機的物理路徑;
 
? ? ? ?2、在這個物理路徑中用截取字符串的方法獲得文件名(第一步中取得的路徑為本機的絕對路徑,在服務器上是無效的,所以這里我們只需要獲取文件名);
 
? ? ? ?3、利用file類型的<input>控件屬性PostedFile的SaveAs()方法將相應文件存儲到服務器中指定的文件夾中。
 
? ? ? ?核心代碼:
 
?
 
?
 
?
 
[csharp]?view plain?copy?
 
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")??????????{??????????????//將文件保存在服務器中根目錄下的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控件來顯示多個附件: ? ?
 
? ? ? ?代碼:
 
?
 
[html]?view plain?copy?
 
<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下載實例》):? ? ??
 
?
 
[csharp]?view plain?copy?
 
using?System.IO;?????protected?void?lbtnDownLoad_Command(object?sender,?CommandEventArgs?e)?????????{?????????????//?定義文件名???????????????string?fileName?=?"";?????????????//?獲取文件在服務器的地址???????????????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節點中加入如下屬性即可:? ??
 
?
 
[html]?view plain?copy?
 
<configuration>????<system.web>????????<httpRuntime?executionTimeout="300"?maxRequestLength="51200"?useFullyQualifiedRedirectUrl="false"?/>????</system.web>??</configuration>??
? ? ? ??executionTimeout 屬性的值是 ASP.NET 關閉前允許發生的上載秒數,maxRequestLength指限制上傳文件的大小,useFullyQualifiedRedirectUrl指示客戶端重定向是否是完全限定的,或者指示是否代之以將相對重定向發送到客戶端。
 
?
 
?
 
?參考:http://blog.csdn.net/huyuyang6688/article/details/40785429
                            總結
                            
                                以上是生活随笔為你收集整理的asp文件上传和下载的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。