C#绝对URI从URL中删除“..”
我必须通过FTP上传文件到ftp://ftp.remoteServer.com
我在远程服务器上的根目录包含一个“上传”和一个“下载”文件夹。 我需要将我的文件放在“上传”目录中。 但在登录时,服务器会自动将我置于“下载”文件夹中。
我试过这样做:
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去正确的地方?
我相信你可以将这些点编码为%2E来保留你的URI中的点。
所以像这样:
string serverTarget = "ftp://ftp.remoteServer.com/%2E%2E/upload/myfile.txt";
尝试这个:
string serverTarget = "../upload/myfile.txt";
Uri uri = new Uri(serverTarget, UriKind.Relative);
安迪埃文斯的评论是正确的。
考虑一下URI: http://ftp.myserver.com/../
: http://ftp.myserver.com/../
。 ..
意思是,“带我去这个目录的父母”。 但没有父母! 因此,当您获取绝对URL时,您将最终得到http://ftp.myserver.com/
解析器无法做到的其他事情。
我认为问题在于您的FTP服务器的配置。 我假设目录结构如下所示:
ftproot
upload
download
它看起来像FTP服务自动登录到/ftproot/download
。 也就是说, ftp.myserver.com
被映射到本地文件系统上的/ftproot/download
。 如果是这样的话,那么在URI的任何地方摆弄都不会让你感觉到任何地方。 如果URI根被映射到下载目录,那么使用..
语法就无法“上升一级然后下降”。
您是否可以使用FTP客户端(如Filezilla)或者Windows FTP命令行工具上传? 如果是这样,那么你做什么步骤? 你可以让你的代码做同样的事情吗?
链接地址: http://www.djcxy.com/p/56747.html