ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤之下載或在線查看實(shí)現(xiàn)代碼
更新時(shí)間:2012年10月06日 23:34:48 作者:
在目錄瀏覽中,如果選擇的是一個(gè)文件,單擊“打開(kāi)”按鈕就可以進(jìn)行文件下載
在目錄瀏覽中,如果選擇的是一個(gè)文件,單擊“打開(kāi)”按鈕就可以進(jìn)行文件下載。當(dāng)然,也可以選擇直接打開(kāi),如圖1所示。

圖1 下載和在線打開(kāi)界面
單擊“打開(kāi)”按鈕將直接打開(kāi)該文件,單擊“保存”按鈕可以下載該文件。
代碼實(shí)現(xiàn)
打開(kāi)文件所單擊的還是“打開(kāi)”按鈕,所以要在“打開(kāi)”事件中加以判斷,看選中的是文件夾還是文件。故對(duì)btnOpen_Click()事件進(jìn)行了修改,下面加重部分為新增的代碼:
private void BtnOpen_Click(object sender, System.EventArgs e)
{
if(FileList.SelectedItem.Text=="返回上級(jí)目錄") //返回上級(jí)目錄
{
string ParentPath=Directory.GetParent(CurrentPath).ToString();
LoadDir(ParentPath);
return;
}
else if(FileList.SelectedItem.Text.IndexOf(".")>0) //打開(kāi)文件
{
FileDownload(FileList.SelectedItem.Text);
}
else //打開(kāi)目錄
{
LoadDir(FileList.SelectedItem.Text);
}
}
如果選擇的是文件,則調(diào)用FileDownload()方法,其代碼部分如下:
private void FileDownload(string FullFileName)
{
FileInfo DownloadFile = new FileInfo(YourFileName); //設(shè)置要下載的文件
Response.Clear(); //清除緩沖區(qū)流中的所有內(nèi)容輸出
Response.ClearHeaders(); //清除緩沖區(qū)流中的所有頭
Response.Buffer = false; //設(shè)置緩沖輸出為false
//設(shè)置輸出流的 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 內(nèi)容輸出流。
Response.WriteFile(DownloadFile.FullName);
Response.Flush(); //向客戶端發(fā)送當(dāng)前所有緩沖的輸出
Response.End(); //將當(dāng)前所有緩沖的輸出發(fā)送到客戶端
}
這段代碼是采用輸出流的形式進(jìn)行文件傳輸,理解起來(lái)比較困難。如果換一種方式進(jìn)行處理的話,可以在頁(yè)面加一個(gè)HyperLink控件困難。在選擇相應(yīng)的文件時(shí),使其鏈接到相應(yīng)的路徑。這里不再多說(shuō)。

圖1 下載和在線打開(kāi)界面
單擊“打開(kāi)”按鈕將直接打開(kāi)該文件,單擊“保存”按鈕可以下載該文件。
代碼實(shí)現(xiàn)
打開(kāi)文件所單擊的還是“打開(kāi)”按鈕,所以要在“打開(kāi)”事件中加以判斷,看選中的是文件夾還是文件。故對(duì)btnOpen_Click()事件進(jìn)行了修改,下面加重部分為新增的代碼:
復(fù)制代碼 代碼如下:
private void BtnOpen_Click(object sender, System.EventArgs e)
{
if(FileList.SelectedItem.Text=="返回上級(jí)目錄") //返回上級(jí)目錄
{
string ParentPath=Directory.GetParent(CurrentPath).ToString();
LoadDir(ParentPath);
return;
}
else if(FileList.SelectedItem.Text.IndexOf(".")>0) //打開(kāi)文件
{
FileDownload(FileList.SelectedItem.Text);
}
else //打開(kāi)目錄
{
LoadDir(FileList.SelectedItem.Text);
}
}
如果選擇的是文件,則調(diào)用FileDownload()方法,其代碼部分如下:
復(fù)制代碼 代碼如下:
private void FileDownload(string FullFileName)
{
FileInfo DownloadFile = new FileInfo(YourFileName); //設(shè)置要下載的文件
Response.Clear(); //清除緩沖區(qū)流中的所有內(nèi)容輸出
Response.ClearHeaders(); //清除緩沖區(qū)流中的所有頭
Response.Buffer = false; //設(shè)置緩沖輸出為false
//設(shè)置輸出流的 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 內(nèi)容輸出流。
Response.WriteFile(DownloadFile.FullName);
Response.Flush(); //向客戶端發(fā)送當(dāng)前所有緩沖的輸出
Response.End(); //將當(dāng)前所有緩沖的輸出發(fā)送到客戶端
}
這段代碼是采用輸出流的形式進(jìn)行文件傳輸,理解起來(lái)比較困難。如果換一種方式進(jìn)行處理的話,可以在頁(yè)面加一個(gè)HyperLink控件困難。在選擇相應(yīng)的文件時(shí),使其鏈接到相應(yīng)的路徑。這里不再多說(shuō)。
您可能感興趣的文章:
- ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤之文件夾實(shí)現(xiàn)
- asp.net 網(wǎng)絡(luò)硬盤實(shí)現(xiàn)分析
- ASP.NET+XML打造網(wǎng)絡(luò)硬盤原理分析
- ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤之兩重要類代碼
- ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤之查看文件夾實(shí)現(xiàn)代碼
- ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤之上傳文件實(shí)現(xiàn)代碼
- ASP.NET設(shè)計(jì)網(wǎng)絡(luò)硬盤之刪除文件夾實(shí)現(xiàn)代碼
- Asp.net mvc實(shí)時(shí)生成縮率圖到硬盤
相關(guān)文章
近幾天對(duì)DataSet的新認(rèn)識(shí)
近幾天對(duì)DataSet的新認(rèn)識(shí)...2007-04-04
完美解決在ModalPopupExtender中使用CalendarExtender時(shí)被層遮擋的問(wèn)題
ASP.NET AJAX Control Toolkit是一組非常不錯(cuò)的基于asp.net的ajax控件,它建立在asp.net 3.0的ScriptManager組件之上,提供了很多非常實(shí)用的效果和功能。2009-11-11
支持Ajax跨域訪問(wèn)ASP.NET Web Api 2(Cors)的示例教程
這篇文章主要介紹了支持Ajax跨域訪問(wèn)ASP.NET Web Api 2(Cors)的示例教程,需要的朋友可以參考下2016-04-04
記錄asp.net網(wǎng)站是什么原因?qū)е峦V惯\(yùn)行的代碼
這篇文章主要介紹了記錄asp.net網(wǎng)站是什么原因?qū)е峦V惯\(yùn)行的具體實(shí)現(xiàn)2014-03-03
Asp.net管理信息系統(tǒng)中數(shù)據(jù)統(tǒng)計(jì)功能的實(shí)現(xiàn)方法
這篇文章主要介紹了Asp.net管理信息系統(tǒng)中數(shù)據(jù)統(tǒng)計(jì)功能的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-07-07
微軟發(fā)布的Data Access Application Block的使用代碼
微軟發(fā)布的Data Access Application Block的使用代碼...2007-04-04

