2016-09-22 115 views
0

我有一個文件夾,其中包含幾個PDF文件,並插入和查看所有這些pdf的是不通過2種方法。我必須移動此文件夾以將此文件夾放置在項目文件之外。所以我必須使用絕對路徑。我在互聯網上嘗試過一些網絡,但沒有一個爲我工作。如何在絕對地圖方法中提供絕對路徑?

以下代碼是一個按鈕clcik事件

string directoryPath = @"D:\competion\pdfFolder\"; 
string svrPath = Server.MapPath(directoryPath); 

DataSet ds = new DataSet(); 
string extension = Path.GetExtension(FileUpload1.FileName); 
if ((FileUpload1.HasFile)) 
{ 
    if (extension == ".pdf") 
    { 
     if (grdPolicyDetails.Rows.Count > 0) 
     { 
      //Few methods are invoked in the body 
     } 
    } 
} 

裏有,如果else語句其他部分,但我還沒有添加這些代碼。

+2

如果你有絕對路徑,爲什麼你需要映射它? –

+0

我認爲在IIS中你可以使該文件夾路徑成爲一個虛擬文件夾並將其添加(鏈接到您的網站)。 (您網站中的所有文件夾不一定必須位於根文件夾中)。 – nocturns2

+0

@ nocturns2如果你能爲此提供一個解決方案,這真是太好了。 – Mike

回答

2

Server.MapPath方法僅適用於作爲Web應用程序結構一部分的相對路徑。如果您需要提供位於外部的PDF文件,則可能需要一些端點來讀取服務器上的文件內容並將其傳輸到客戶端。

例如:

string pdfPath = @"D:\competion\pdfFolder\myfile.pdf"; 
this.Response.ContentType = "application/pdf"; 
this.Response.TransmitFile(pdfPath); 
this.Response.End(); 
+0

我試圖更改此代碼,因爲我想要它仍然會給出相同的異常,說「路徑不是有效的虛擬路徑」 – Mike

+0

也文件名後合併線。 – Mike

+0

它給你這個異常,因爲你試圖將它傳遞給'Server.MapPath'方法。正如你從我的答案中看到的,這是行不通的。正如你所解釋的,如果你想提供一個位於你的應用程序目錄結構之外的文件,你將需要一個處理程序將它的內容傳輸到響應中。 –

-1

請使用PDF上傳這些代碼。

如果(fuDoc.HasFile) {

 string ext = ""; 
     string fnm = Path.GetFileName(fuDoc.PostedFile.FileName).ToLower(); 
     ext = Path.GetExtension(fuDoc.PostedFile.FileName).ToLower(); 
     if ((ext != ".doc") & (ext != ".pdf") & (ext != ".docx")) 
     { 
      Page.ClientScript.RegisterStartupScript(GetType(), "msgbox", "alert('Please select .doc or .pdf or .docx files only');", true); 
      fuDoc.Focus(); 
      return; 
     } 

     fuDoc.PostedFile.SaveAs(Server.MapPath("~/Upload/Documents/") + fuDoc.FileName); 
     strDoc = "Upload/Documents/" + fuDoc.FileName; 


    } 
+0

感謝您的代碼,但我已經解決了上傳PDF的問題,現在我必須顯示PDF。另外我不能使用Server.MapPath作爲解決方案。 – Mike

+0

ohk然後把「〜」+「你的路徑」放在任何按鈕上 –

+0

它不起作用。直接去例外 – Mike

1

我沒有創建的文件夾 'testVirPath' 一個測試項目。

在我的iis中,我添加了一個虛擬目錄,指向不同驅動器上的文件夾(testVirPath)(除了我的項目或發佈的驅動器)。 我在本地主機上添加了必要的權限和與我發佈的站點相同的用戶。

然後,我將一些pdf文件添加到testVirPath文件夾,並將項目發佈到iis。 試試吧。 這將列出存儲在testVirPath文件夾中的pdf文件。

[家庭控制器]

public ActionResult Files() 
    { 
     ViewBag.TheFiles = GetFiles(Server.MapPath("/testVirPath/")); 
     return View(); 
    } 

    private FileInfo[] GetFiles(string path) 
    { 
     DirectoryInfo di = new DirectoryInfo(path); 
     FileInfo[] files = di.GetFiles(); 

     return files; 
    } 

[文件視圖]

<div> 
    @foreach (FileInfo f in @ViewBag.TheFiles) 
    { 
     <p>@f.FullName</p> 
    } 
</div> 
0
string directoryPath = Server.MapPath("~/competion/pdfFolder/"); 

試試這個!

+0

我不認爲服務器映射方法崇拜本地硬盤上的文件 – Mike

+0

工作無處不在,並且如果解決方案運行在本地主機上或在服務器上運行。 符號「〜」代表您的解決方案的根目錄,然後添加目錄路徑。 –

+0

檢查此以獲取有關服務器映射路徑的更多詳細信息 http://stackoverflow.com/a/275791/5350526 –