2011-11-02 50 views
0

我需要提供一個下載鏈接到D:驅動器中的pdf文件。如何從另一個驅動器獲取文件下載的絕對路徑?

我的網站託管在C:同一系統的驅動器中。

如何在C:驅動器託管的我的網站上的D:驅動器中下載我的pdf文件的鏈接?

+0

你試過:字符串str = HttpContext.Current.Request.Url.AbsolutePath; ? –

+0

對不起,這是..即時新到stackoverflow。將很快做到。和路徑..我只需要給一個下載鏈接。但我無法引用D中的文件: –

回答

1

通常,我儘量不要直接暴露可下載文件。

相反,我編寫了一個ASHX處理程序(Visual Studio中的「Generic Handler」),用於提取文件並將其發送到用戶的瀏覽器。

基本上,你傳遞一個唯一的ID給處理程序(例如純文件名)和處理程序,其餘在本地獲取文件,並在這個僞代碼流式傳輸到瀏覽器,如:

public class MyHandler : 
    IHttpHandler 
{ 
    public void ProcessRequest(HttpContext context) 
    { 
     var fileName = Request[@"fn"]; 
     var filePath = Path.Combine(@"C:\My\Fixed\File\Path", fileName); 

     Response.ContentType = @"application/pdf"; 

     Response.AddHeader(
      @"Content-Disposition", 
      @"attachment; filename=" + Path.GetFileName(filePath)); 
     Response.AddHeader(
      @"Content-Length", 
      new FileInfo(filePath).Length); 

     Response.WriteFile(filePath); 
     Response.End(); 
    } 

    public bool IsReusable 
    { 
     get { return false; } 
    } 
} 

這種方法的優點是您可以完全控制是否以及如何下載文件。一些場景包括:

  • 權限檢查用戶是否登錄並可以下載文件。
  • 用不同的文件名流到客戶端。
  • 將文件下載記錄到數據庫。
  • ...
+0

我無法打開PDF文件。它說的文件可能是腐敗的。所以我試圖下載一個txt文件。當我打開該文件時,內容丟失了。我以下面的文件內容爲「<!DOCTYPE html PUBLIC' - // W3C // DT」。 –

+0

所以你刪除了15個聲望點,因爲我的_pseudo code_不起作用?當然,你必須根據你的需要來調整它。 –

+1

對不起..它不是..它沒有工作.. Response.WriteFile(filePath);無法映射到另一個驅動器。這是我的實際問題。只能從projet文件夾下載 –

0

可以掛載驅動器使用NTFS交接點,這將使你的D:驅動器出現,就好像它是你的C:驅動器的一部分,這是目前D:到文件夾C:驅動器內。所有問題解決。

mklink是Windows附帶的一個程序,可以幫助您創建,管理和刪除各種鏈接(包括連接點),它的使用細節可以在at the Microsoft TechNet documentation center找到。

或者,您可能對符號鏈接和硬鏈接感興趣,它們本質上是相似的(雖然有細微差別)。

相關問題