我在.NEt 2.0中使用c#来简单地尝试上传文件。代码中的一切似乎都没问题,但是当我从FtpWebRequest.GetRequestStream方法创建流时,它仍然失败。
这是代码......
FtpWebRequest ftpRequest;
FtpWebResponse ftpResponse;
try
{
string fileName = Path.GetFileName(strCompleteFilePath);
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost/" + fileName));
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
ftpRequest.Proxy = null;
ftpRequest.UseBinary = true;
ftpRequest.Credentials = new NetworkCredential("myUserID", "myPW");
ftpRequest.KeepAlive = false;
FileInfo ff = new FileInfo(strCompleteFilePath);
byte[] fileContents = new byte[ff.Length];
using (FileStream fr = ff.OpenRead())
{
fr.Read(fileContents, 0, Convert.ToInt32(ff.Length));
}
using (Stream writer = ftpRequest.GetRequestStream())
{
writer.Write(fileContents, 0, fileContents.Length);
}
ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
}
错误......
{System.Net.WebException: The remote server returned an error: (501) Syntax error in parameters or arguments.
at System.Net.FtpWebRequest.SyncRequestCallback(Object obj)
at System.Net.FtpWebRequest.RequestCallback(Object obj)
at System.Net.CommandStream.InvokeRequestCallback(Object obj)
at System.Net.CommandStream.Abort(Exception e)
at System.Net.FtpWebRequest.FinishRequestStage(RequestStage stage)
at System.Net.FtpWebRequest.GetRequestStream()
答案 0 :(得分:5)
您错过了路径中的/。
如果您的文件名为“myfile.txt”,您将创建一个ftp://myhostmyfile.txt
的路径,我猜这应该是ftp://myhost/myfile.txt
因此,只需在ftp://myhost
字符串的末尾添加一个。
答案 1 :(得分:4)
这看起来不对:
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost" + fileName));
除非文件名的内容以 / 开头,否则我认为您需要添加其中一个,这样就像:
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost/" + fileName));
答案 2 :(得分:3)
该行:
ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost" + fileName));
如果fileName
变量不包含必要的斜杠,可能会出现问题。
答案 3 :(得分:1)
FTP服务器对.NET生成的STOR命令不满意。最好看的地方是服务器的日志文件。粗略猜测:路径不寻常,您通常要指定目录名称(如ftp://myhost/somedir/filename)
答案 4 :(得分:1)
尝试
ftpRequest.UsePassive = false;
它对我有用。