2011-12-15 43 views
7

我要通過FTP上傳文件到ftp://ftp.remoteServer.comC#絕對URI刪除「..」從URL

上REMOTESERVER我的根目錄下包含‘上傳’和‘下載’文件夾中。我需要將我的文件放在「上傳」目錄中。但在登錄時,服務器會自動將我置於「下載」文件夾中。

我試着這樣做:

string serverTarget = "ftp://ftp.remoteServer.com/"; 
serverTarget += "../upload/myfile.txt"; 
Uri target = new Uri(serverTarget); 
FTPWebRequest ftp = (FTPWebRequest)FtpWebRequest.Create(target); 

using(Stream requestStream = ftp.GetRequestStream()) { 
    // Do upload here 
} 

此代碼失敗:(550)文件不可用(例如,未找到文件,沒有訪問權限) 我調試的代碼,並target.AbsoluteUri收益爲ftp://ftp.remoteServer.com/upload而不是ftp://ftp.remoteServer.com/../upload (缺少..)

如果我把ftp://ftp.remoteServer.com/../upload放在瀏覽器中,我可以登錄並驗證這是我想放置文件的正確位置。

如何獲取FTPWebRequest去正確的位置?

+0

沒有嘗試@ 「而不是常規」 的表情。 – ApolloSoftware 2011-12-15 16:00:58

+0

逐字字符串字面... – ApolloSoftware 2011-12-15 16:05:19

回答

2

我相信你可以將點編碼爲%2E來保持你的URI中的點。

因此,像:

string serverTarget = "ftp://ftp.remoteServer.com/%2E%2E/upload/myfile.txt"; 
1

試試這個:

string serverTarget = "../upload/myfile.txt"; 
Uri uri = new Uri(serverTarget, UriKind.Relative); 
1

安迪·埃文斯的評論是正確的。考慮網址:http://ftp.myserver.com/../..的意思是,「帶我到這個目錄的父母」。但有沒有家長!所以,當你得到絕對URL時,你將最終得到http://ftp.myserver.com/解析器沒有別的東西可以做。

我認爲問題出在您的FTP服務器的配置上。我假設的目錄結構看起來是這樣的:

ftproot 
    upload 
    download 

它看起來像FTP服務是自動登錄你/ftproot/download。也就是說,URI ftp.myserver.com被映射到本地文件系統上的/ftproot/download。如果是這樣的話,那麼在URI的任何地方擺弄都不會讓你感覺到任何地方。如果URI根目錄映射到下載目錄,那麼使用..語法就無法「上升一級然後下降」。

您是否可以使用FTP客戶端(如Filezilla)或者Windows FTP命令行工具上傳?如果是這樣,那麼你做什麼步驟?你可以讓你的代碼做同樣的事情嗎?