2011-09-27 250 views
0

你好代碼專家, 我正在上傳一些文件到虛擬目錄。對於虛擬目錄,我給喜歡虛擬路徑問題

"/Uploads/" + DatabaseName + "/" + REOID + "/" + "ExternalDocument" + "/"; 

它工作在我的本地罰款,但不是在活的服務器的路徑。它不在活動服務器上傳文件。

如果我將其更改爲

"~/Uploads/" + DatabaseName + "/" + REOID + "/" + "ExternalDocument" + "/"; 

然後將它的工作?如果沒有,那我該如何將它映射到虛擬目錄?

回答

1

閱讀關於〜means的文檔。你會發現第二種方法總是有效的,第一種方法不是。首先確定文件夾是/ Uploads(在Web服務器根目錄下)。

+0

謝謝你告訴我,第二種方法是否也會在現場工作呢? – user728630

2

使用功能使用Server.Mappath

http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.mappath.aspx

Server.MapPath("~/Uploads/" + DatabaseName + "/" + REOID + "/" + "ExternalDocument" + "/"); 
+0

我嘗試過使用它,但它現在不在我的本地工作。沒有圖片上傳。 – user728630

+0

當您嘗試上傳文件時是否會返回特定錯誤? – Markis

+0

其實我正在使用一個web處理程序文件將圖像寫入虛擬目錄,當我像你說的那樣給出的時候沒有被調用,但是當我使用像「〜/ Uploads /」+ DatabaseName +「/」 + REOID +「/」+「ExternalDocument」+「/」; – user728630

1

+1 @MarkisT。建議你也讓框架爲您做組合:如果您仍然有問題

http://msdn.microsoft.com/en-us/library/dd782933.aspx

using System.IO; 
using System.Web; 

var path = Path.Combine("~/Uploads", DataBaseName, REOID, "ExternalDocument"); 
var fullPath = Server.MapPath(path); 

;會建議您檢查本地和服務器上的fullPath,以瞭解與虛擬路徑和絕對路徑相關的情況。您也可能在服務器上存在安全問題,尤其是在您恰好在應用程序目錄之外編寫代碼時。當然,在這種情況下會期待例外。

+0

Iam得到錯誤'No Overload for method'Combine'需要4個參數 – user728630

+0

它在.NET Framework 4+中。在3.5及更低版本中,您將不得不使用多個Path.Combine語句(每個2個參數)或手動梳理。有關檢查Server.MapPath結果的建議仍然存在 - 瞭解您實際寫入的位置是解決問題的關鍵。 – dividius