2011-12-15 80 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命令行工具上传?如果是这样,那么你做什么步骤?你可以让你的代码做同样的事情吗?