2017-10-05 239 views
3

我需要通過ftp上傳文件到主機。在主機上的根目錄中創建的/home2/travele2路徑 enter image description here遠程服務器返回錯誤:(550)上傳文件到FTP使用FtpWebRequest

我可以通過FileZilla的程序上傳文件到主機,但是當我試圖通過網站上傳的文件,它使我這個錯誤:

The remote server returned an error: (550) File unavailable (e.g., file not found, no access).

什麼問題是什麼?

// Get the object used to communicate with the server. 
FtpWebRequest ftpWebRequest = (FtpWebRequest)WebRequest.Create("ftp://00.00.00.00/home2/travele2"); 
ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile; 
// This example assumes the FTP site uses anonymous logon. 
ftpWebRequest.Credentials = new NetworkCredential("aaaaaaa", "0000000"); 

// Copy the contents of the file to the request stream. 
StreamReader sourceStream = new StreamReader(Server.MapPath("/Content/Site.pdf")); 
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd()); 
sourceStream.Close(); 
ftpWebRequest.ContentLength = fileContents.Length; 

Stream requestStream = ftpWebRequest.GetRequestStream(); 
requestStream.Write(fileContents, 0, fileContents.Length); 
requestStream.Close(); 

FtpWebResponse response = (FtpWebResponse)ftpWebRequest.GetResponse(); 

Console.WriteLine("Upload File Complete, status {0}", response.StatusDescription); 

response.Close(); 

enter image description here

+0

誤差似乎從該線到來:'的FtpWebRequest的FtpWebRequest =(的FtpWebRequest)WebRequest.Create( 「ftp://00.00.00.00/home2/travele2」) ;'(你有這個文件夾的權限和文件存在嗎?)。你可以用'WebException'使用try-catch塊,並發現'var status =((FtpWebResponse)e.Response).StatusDescription;'的實際問題。 –

+0

需要什麼權限? – programmer138200

+0

文件夾寫入訪問權限...我假設您已經被授予該文件夾的文件寫入訪問權限,您可以繼續使用'WebException'找到原因,正如我之前提到的。 –

回答

3

網址必須包含目標文件名:

FtpWebRequest ftpWebRequest = 
    (FtpWebRequest)WebRequest.Create("ftp://ftp.example.com/home2/travele2/Site.pdf"); 

否則怎麼會在FtpWebRequest知道,用什麼名字呢?


而且一旦你的解決,你會發現上載損壞文件,當你將這個文件看作UTF-8編碼的文本。什麼是廢話,因爲PDF是一個二進制文件。

對於正確的代碼,請參見:
Upload and download a binary file to/from FTP server in C#/.NET

+0

非常感謝。它解決了 – programmer138200

+0

我可以上傳文本文件並下載!但上傳圖片或pdf文件後下載文件損壞。圖像無法打開。 – programmer138200

+0

當然,我在回答的第二部分已經介紹了這一點。 –

-1

你加載你的SourceStream看起來有點腥。我會推薦下載的NuGet庫的FTP客戶端的方式,它會使你的生活輕鬆了許多。通過良好的文檔和示例,FluentFTP是一個不錯的選擇。

檢查出來: https://github.com/robinrodricks/FluentFTP

+0

在推薦軟件時,您應明確說明您是否隸屬於該項目。 – Fildor

+0

首先它是一個開放源代碼庫...並且我不以任何方式與這個項目相關。 – kioannou

相關問題