我必须通过FTP将文件上传到ftp://ftp.remoteServer.com
我在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 :(得分:2)
我相信您可以将点编码为%2E以保留URI中的点。
类似于:
string serverTarget = "ftp://ftp.remoteServer.com/%2E%2E/upload/myfile.txt";
答案 1 :(得分:1)
试试这个:
string serverTarget = "../upload/myfile.txt";
Uri uri = new Uri(serverTarget, UriKind.Relative);
答案 2 :(得分:1)
Andy Evans的评论是正确的。
考虑URI:http://ftp.myserver.com/../
。 ..
表示“将我带到此目录的父级”。但 没有父母!因此,当您获得绝对URL时,您将最终得到http://ftp.myserver.com/
解析器无法做任何事情。
我认为问题在于您的FTP服务器的配置。我假设目录结构类似于:
ftproot
upload
download
看起来FTP服务会自动将您登录到/ftproot/download
。也就是说,URI ftp.myserver.com
被映射到本地文件系统上的/ftproot/download
。如果是这种情况,那么摆弄URI的任何数量都不会让你随处可见。如果URI根目录映射到下载目录,则无法使用..
语法“向上一级然后向下”。
您是否可以使用Filezilla等FTP客户端或Windows FTP命令行工具上传?如果是这样,您采取了哪些步骤?你可以让你的代码做同样的事情吗?