2010-05-05 99 views
4

我試圖使用ftp發送文件。我有以下代碼:在C#中使用ftp發送文件

string server = "x.x.x.x"; // Just the IP Address 

FileStream stream = File.OpenRead(filename); 
byte[] buffer = new byte[stream.Length]; 

WebRequest request = WebRequest.Create("ftp://" + server); 
request.Method = WebRequestMethods.Ftp.UploadFile;    
request.Credentials = new NetworkCredential(username, password); 

Stream reqStream = request.GetRequestStream(); // This line fails 
reqStream.Write(buffer, 0, buffer.Length); 
reqStream.Close(); 

但是當我運行它,我得到以下錯誤:

請求的URI是這個FTP命令無效。

請誰能告訴我爲什麼?我使用這個不正確嗎?

+3

'server'是怎麼樣的? – thelost 2010-05-05 11:29:48

+0

@thelost - 不恰當的問題......他不能告訴我們ftp ...它可能是公開的...你可以使用一個臨時字符串來檢查完整的服務器URI是否應該如此。其餘的看起來不錯。 – GxG 2010-05-05 11:32:10

回答

8

我認爲你需要指定你上傳過的路徑和文件名,所以我覺得它應該是的:

WebRequest request = WebRequest.Create("ftp://" + server + "/"); 

WebRequest request = WebRequest.Create("ftp://" + server + "/filename.ext"); 
+1

第一個給出了相同的錯誤,但一旦文件名被指定,它工作正常 - 謝謝 – 2010-05-05 12:03:23

+0

@ ho1謝謝。如果你正在上傳到一個文件夾,那麼它應該像'WebRequest request = WebRequest.Create(「ftp://」+ server +「// foldername」+「/ filename.ext」);' – Praveen 2013-05-21 14:31:44

0

當我不得不使用ftp方法,我必須設置一些標誌請求對象,如果沒有它的功能不工作:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(ftpPath); 
request.KeepAlive = true/false; 
request.UsePassive = true/false; 
request.UseBinary = xxx; 

這些標誌依賴於服務器上,如果你有服務器無法訪問,那麼你可以不知道在這裏幹什麼用的,但你可以測試,看看適用於您的配置。

並且URI的末尾可能缺少文件名,以便服務器知道上傳文件的保存位置。

+0

這些標誌似乎不是WebRequest對象的屬性 – 2010-05-05 12:01:35

+0

@ pm_2:對不起,我忘了添加一行創建請求對象的地方。它實際上是FtpWebRequest類型的一個對象。我更新了答案以顯示它。 – user218447 2010-05-05 12:04:07