在瀏覽目錄中,如果選擇的是一個檔案,單擊“開啟”按鈕就可以進行檔案下載。當然,也可以選擇直接開啟,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(); //清除緩衝區流中的所有內容輸出
Response.ClearHeaders(); //清除緩衝區流中的所有頭
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(); //向用戶端發送當前所有緩衝的輸出
Response.End(); //將當前所有緩衝的輸出發送到用戶端
}
這段代碼是採用輸出資料流的形式進行檔案傳輸,理解起來比較困難。如果換一種方式進行處理的話,可以在頁面加一個HyperLink控制項困難。在選擇相應的檔案時,使其連結到相應的路徑。這裡不再多說。