這看起來像一個微不足道的問題,但我的網絡搜索答案(甚至在本網站上)迫使我明確提出問題。問題當文件不存在於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