ASP.NET設計網絡硬盤之下載或在線查看實現代碼
更新時間:2012年10月06日 23:34:48 作者:
在目錄瀏覽中,如果選擇的是一個文件,單擊“打開”按鈕就可以進行文件下載
在目錄瀏覽中,如果選擇的是一個文件,單擊“打開”按鈕就可以進行文件下載。當然,也可以選擇直接打開,如圖1所示。

圖1 下載和在線打開界面
單擊“打開”按鈕將直接打開該文件,單擊“保存”按鈕可以下載該文件。
代碼實現
打開文件所單擊的還是“打開”按鈕,所以要在“打開”事件中加以判斷,看選中的是文件夾還是文件。故對btnOpen_Click()事件進行了修改,下面加重部分為新增的代碼:
private void BtnOpen_Click(object sender, System.EventArgs e)
{
if(FileList.SelectedItem.Text=="返回上級目錄") //返回上級目錄
{
string ParentPath=Directory.GetParent(CurrentPath).ToString();
LoadDir(ParentPath);
return;
}
else if(FileList.SelectedItem.Text.IndexOf(".")>0) //打開文件
{
FileDownload(FileList.SelectedItem.Text);
}
else //打開目錄
{
LoadDir(FileList.SelectedItem.Text);
}
}
如果選擇的是文件,則調用FileDownload()方法,其代碼部分如下:
private void FileDownload(string FullFileName)
{
FileInfo DownloadFile = new FileInfo(YourFileName); //設置要下載的文件
Response.Clear(); //清除緩沖區(qū)流中的所有內容輸出
Response.ClearHeaders(); //清除緩沖區(qū)流中的所有頭
Response.Buffer = false; //設置緩沖輸出為false
//設置輸出流的 HTTP MIME 類型為application/octet-stream
Response.ContentType = "application/octet-stream";
//將 HTTP 頭添加到輸出流
Response.AppendHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(DownloadFile.FullName,System.Text.Encoding.UTF8));
Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
//將指定的文件直接寫入 HTTP 內容輸出流。
Response.WriteFile(DownloadFile.FullName);
Response.Flush(); //向客戶端發(fā)送當前所有緩沖的輸出
Response.End(); //將當前所有緩沖的輸出發(fā)送到客戶端
}
這段代碼是采用輸出流的形式進行文件傳輸,理解起來比較困難。如果換一種方式進行處理的話,可以在頁面加一個HyperLink控件困難。在選擇相應的文件時,使其鏈接到相應的路徑。這里不再多說。

圖1 下載和在線打開界面
單擊“打開”按鈕將直接打開該文件,單擊“保存”按鈕可以下載該文件。
代碼實現
打開文件所單擊的還是“打開”按鈕,所以要在“打開”事件中加以判斷,看選中的是文件夾還是文件。故對btnOpen_Click()事件進行了修改,下面加重部分為新增的代碼:
復制代碼 代碼如下:
private void BtnOpen_Click(object sender, System.EventArgs e)
{
if(FileList.SelectedItem.Text=="返回上級目錄") //返回上級目錄
{
string ParentPath=Directory.GetParent(CurrentPath).ToString();
LoadDir(ParentPath);
return;
}
else if(FileList.SelectedItem.Text.IndexOf(".")>0) //打開文件
{
FileDownload(FileList.SelectedItem.Text);
}
else //打開目錄
{
LoadDir(FileList.SelectedItem.Text);
}
}
如果選擇的是文件,則調用FileDownload()方法,其代碼部分如下:
復制代碼 代碼如下:
private void FileDownload(string FullFileName)
{
FileInfo DownloadFile = new FileInfo(YourFileName); //設置要下載的文件
Response.Clear(); //清除緩沖區(qū)流中的所有內容輸出
Response.ClearHeaders(); //清除緩沖區(qū)流中的所有頭
Response.Buffer = false; //設置緩沖輸出為false
//設置輸出流的 HTTP MIME 類型為application/octet-stream
Response.ContentType = "application/octet-stream";
//將 HTTP 頭添加到輸出流
Response.AppendHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(DownloadFile.FullName,System.Text.Encoding.UTF8));
Response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
//將指定的文件直接寫入 HTTP 內容輸出流。
Response.WriteFile(DownloadFile.FullName);
Response.Flush(); //向客戶端發(fā)送當前所有緩沖的輸出
Response.End(); //將當前所有緩沖的輸出發(fā)送到客戶端
}
這段代碼是采用輸出流的形式進行文件傳輸,理解起來比較困難。如果換一種方式進行處理的話,可以在頁面加一個HyperLink控件困難。在選擇相應的文件時,使其鏈接到相應的路徑。這里不再多說。
相關文章
完美解決Could not load file or assembly AjaxPro.2 or one of its
Could not load file or assembly AjaxPro.2,經排查原來是mcafee限制了2007-08-08asp.net中使用DatagridView的增刪改方法具體實現
asp.net中使用DatagridView的增刪改方法具體實現,需要的朋友可以參考一下2013-06-06.net面向對象之多線程(Multithreading)及 多線程高級應用
這篇文章主要介紹.net面向對象程序設計階段多線程Multithreading及多線程高級應用的介紹,需要的朋友可以參考下2015-07-07ASP.NET Core 2.1 使用Docker運行的方法步驟
這篇文章主要介紹了ASP.NET Core 2.1 使用Docker運行的方法步驟,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07