下面的代碼在針對內部網絡中的服務器運行時起作用。當我更改證書以反映我們網絡之外的服務器時,我收到了550錯誤的迴應。當我趕上像這樣的例外:嘗試在遠程服務器上的C#中通過FTP上載文件時發生550錯誤
try {
requestStream = request.GetRequestStream();
FtpWebResponse resp = (FtpWebResponse)request.GetResponse();
}
catch(WebException e) {
string status = ((FtpWebResponse)e.Response).StatusDescription;
throw e;
}
狀態的數值爲: 「550命令STOR失敗\ r \ n」個
我可以使用相同的憑據使用客戶端這樣成功上傳文件作爲Filezilla。我已經嘗試使用SetMethodRequiresCWD()作爲其他答案已建議,這並不適用於我。
下面是代碼,它接收一個字符串列表,每個字符串都包含文件的完整路徑。
private void sendFilesViaFTP(List<string> fileNames) {
FtpWebRequest request = null;
string ftpEndPoint = "ftp://pathToServer/";
string fileNameOnly; //no path
Stream requestStream;
foreach(string each in fileNames){
fileNameOnly = each.Substring(each.LastIndexOf('\\') + 1);
request = (FtpWebRequest)WebRequest.Create(ftpEndPoint + fileNameOnly);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("username", "password");
StreamReader fileToSend = new StreamReader(each);
byte[] fileContents = Encoding.UTF8.GetBytes(fileToSend.ReadToEnd()); //this is assuming the files are UTF-8 encoded, need to confirm
fileToSend.Close();
request.ContentLength = fileContents.Length;
requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse(); //validate this in some way?
response.Close();
}
}
你檢查路徑嗎?錯誤550基本上是一個權限被拒絕錯誤(沒有這樣的文件或文件夾)的錯誤。 – JunaidKirkire
此代碼似乎已從此MSDN https://msdn.microsoft.com/en-us/library/ms229715%28v=vs.110%29.aspx頁面(儘管使用了foreach調整)複製並粘貼。正如@JunaidKirkire提到的,魔鬼在細節上 - 確保你的路徑信息和配置都是正確的。 – Clint
我已經仔細檢查了路徑,它與我通過Filezilla連接時看到的路徑相匹配。我也嘗試改變request.Method WebRequestMethods.Ftp.ListDirectory(省略文件名只留下路徑),這也返回錯誤550.我不是說這肯定不是問題,但它不似乎是從我所觀察到的。有沒有可能有另一種解釋? – Eric