Reputation: 41
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)ftpRequest.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()
Upvotes: 4
Views: 7661
Reputation: 941218
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)
Upvotes: 1
Reputation: 36512
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.
Upvotes: 3
Reputation: 63126
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.
Upvotes: 5
Reputation: 55001
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));
Upvotes: 4