开发者

What is wrong with my ftp code?

I am using c# in .NEt 2.0 to simply try to upload a file. Everything seems ok in the code, but it keeps failing at when I go to create a stream from the FtpWebRequest.GetRequestStream method.

Here is the code...

        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)ftpReque开发者_Go百科st.GetResponse(); 
        }

And the error....

{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()


You are missing a / in the path.

You are going to be creating a path that is ftp://myhostmyfile.txt if your file was called "myfile.txt", which I'm guessing should be ftp://myhost/myfile.txt

Therefore just add a / to the end of the ftp://myhost string.


This looks wrong:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost" + fileName));

Unless the contents of filename starts with a / I think you need to add one of those so it would be like:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost/" + fileName));


The line:

ftpRequest = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://myhost" + fileName));

Might be a problem if your fileName variable doesn't include the necessary slashes.


The FTP server is unhappy about the STOR command that .NET generates. Best place to look is in the log file for the server. Taking a wild guess: the path is unusual, you'd typical want to specify a directory name (like ftp://myhost/somedir/filename)


Try

ftpRequest.UsePassive = false;

it works for me.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜