这看起来像一个微不足道的问题,但我的网络搜索答案(甚至在本网站上)迫使我明确提出问题。问题当文件不存在于FTP服务器上时,使用FtpWebRequest通过FTP上传文件
我通过FTP从我的服务器上传文件到远程服务器。我的代码看起来像这样...
public void Upload(string fileToUpload)
{
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://www.remoteserver.com/Data/" + fileToUpload);
request.UsePassive = false;
request.UseBinary = true;
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential ("username","password");
// Copy the contents of the file to the request stream.
StreamReader sourceStream = new StreamReader(fileToUpload);
byte [] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription);
response.Close();
}
这一切似乎都非常直截了当。我遇到的问题是当文件不存在于远程服务器上时出现550错误。我会假设如果文件存在,那么文件就会被创建。此外,我认为如果它确实会被覆盖。因为事实并非如此(至少在编写一个新文件时),我会进一步假设我应该(a)以某种方式首先检查文件,并且(b)如果文件不存在,则创建该文件。但如何做到这一点?
感谢,
迈克
您是否检查过该帐户是否有权在FTP服务器上创建文件? – JNappi
你是在传递'fileToUpload',你传递了一个绝对文件路径,比如'c:\ File.txt'或者只是一个像'File.txt'这样的文件名?另外,你是否明白你的程序只适用于文本文件,对吧? –
@Japp:这不是一个权限问题,因为FTP凭证是针对具有写入权限的用户(我控制两台服务器,因此可以确认这一点)。 – mikerennick