2011-12-05 84 views
1

我對我的網址有一些疑問。相對直接網址

我在我的asp頁面上使用樹形視圖,這就是爲什麼我使用這個getcurrentdirectory。

//DirectoryInfo di = new DirectoryInfo("~" + GetTheCurrentDirectory 
(selectedNodeValue)); 
~ = C://Inetpub//WwwRoot// 
GetTheCurrentDirectory = Projects//Folder1// 

因此,目前這很好,因爲我可以加載文件夾的所有文件。

當我點擊它時嘗試下載文件。

protected void Page_Load(object sender, EventArgs e) 
{ 
    string path = Request["path"].ToString(); 
    string filename = Request["file"].ToString(); 

    fileDownload(filename, Server.MapPath("~\\" + path + filename)); 
} 

因此,我可以檢索路徑這是當前目錄。我在其他頁面中使用的方法。

在server.MapPatch我應該把〜也?因爲當我這樣做是工作localy,但是當我把它放在我的服務器上,下載部分不起作用,所以我想這是一個URL問題,我無法調試,所以我真的失去了這一點!

我改變了一些事情:

DirectoryInfo的二=新的DirectoryInfo(GetTheCurrentDirectory(selectedNodeValue));

所以它返回相同的東西。

所以現在在使用Server.Mappath路徑等類似項目//文件夾1 //

它本地工作,但仍然沒有在服務器上...

+1

這個實現是非常不安全的,你應該考慮改變它。如果我將'path'設置爲空字符串,'file'設置爲* web.config *,我將能夠下載您的站點配置。這可能包含敏感信息,例如支付提供商或數據庫憑證的API密鑰。 – Arjen

+0

我認爲問題不在於URL ...我應該在web.config中添加一些東西,或者從網站上下載一些東西?因爲它本地工作,但也許當它在服務器端我應該添加一些東西? – Kiwimoisi

回答

1

試試這個:

fileDownload(filename, Server.MapPath("~/" + path + filename)); 

而且,作爲最佳實踐,不要使用+來連接字符串。您應該使用的String.Format,所以我會寫出如下上面的一行:

fileDownload(filename, Server.MapPath(string.format("~/{0}{1}", path, filename))); 

只是爲了幫助你瞭解你的問題好,使用Server.Mappath將返回對應於服務器上的物理文件路徑Web服務器上的虛擬路徑。即它將「http://website.com/img.jpg」轉換成類似「C:\ mywebsite \ img.jpg」的東西

更新: 確保您嘗試將文件保存到的文件夾,不是隻讀的,並且您有權在文件夾中創建文件。

+0

我認爲問題不在於URL ...我應該在web.config中添加什麼東西或從網站上下載任何內容?因爲它本地工作,但也許當它在服務器端我應該添加一些東西? – Kiwimoisi

+0

確保您嘗試將文件保存到的文件夾不是隻讀的,並且您有權在文件夾中創建文件。 – Mark