2017-01-03 79 views
1

我試圖上傳FTP文件夾中的文件,但出現以下錯誤。將文件上傳到名稱爲特殊字符的ftp文件夾

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. 
    string path = HttpUtility.UrlEncode("ftp://host:port//01-03-2017/John, Doe S. M.D/file.wav"); 
    FtpWebRequest request = (FtpWebRequest)WebRequest.Create(path); 
    request.Method = WebRequestMethods.Ftp.UploadFile; 

    // This example assumes the FTP site uses anonymous logon. 
    request.Credentials = new NetworkCredential("user", "password"); 

    // Copy the contents of the file to the request stream. 
    StreamReader sourceStream = new StreamReader(@"localpath\example.wav"); 
    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(); 
  • 我可以上傳父文件夾01-03-2017文件,但不是在目標文件夾ROLLINS, SETH S. M.D這顯然具有特殊字符它。
  • 我能夠使用Filezilla上傳
  • 我試圖HttpUtility.UrlEncode但這並沒有幫助

感謝您的時間和幫助文件。

+0

問題出在url:在每個文件夾名稱後面使用「//」而不是「/」@Ankit – Prabu

回答

2

使用這樣的事情:

string path = HttpUtility.UrlEncode("ftp://96.31.95.118:2121//01-03-2017//ROLLINS, SETH S. M.D//30542_3117.wav"); 

或者您可以使用下面的代碼形成一個開放的,並通過它的WebRequest。

var path = new Uri("ftp://96.31.95.118:2121//01-03-2017//ROLLINS, SETH S. M.D//30542_3117.wav"); 
+0

這會讓你'ftp%3a%2f%2f96.31.95.118%3a2121%2f%2f01- 03-2017%2F%2fROLLINS%2C + SETH + S. + MD%2F%2f30542_3117.wav'。這看起來並不是一個正確的方法(即使它偶然發揮作用)。 –

+0

@MartinPrikryl,是的,這個解決方案是不正確的。我的評論是錯誤的,應該在Prabhu對這個問題發表評論之後。 – Ankit

2

你需要在URL路徑編碼空間(也許逗號),如:

string path = 
    "ftp://host:port/01-03-2017/" + 
    HttpUtility.UrlEncode("John, Doe S. M.D") + "/file.wav"; 

實際上,您可以:

ftp://host:port/01-03-2017/John%2c+Doe+S.+M.D/file.wav 
2

代碼工作在C#控制檯應用程序,但在Web Api Action中不起作用。我無法找到原因。

所以我用了一個免費的圖書館。

從可用here一個例子發佈示例代碼:

所以我有使用的可用FluentFtp libary通過Nuget

using System; 
using System.IO; 
using System.Net; 
using FluentFTP; 

namespace Examples { 
    public class OpenWriteExample { 
     public static void OpenWrite() { 
      using (FtpClient conn = new FtpClient()) { 
       conn.Host = "localhost"; 
       conn.Credentials = new NetworkCredential("ftptest", "ftptest"); 

       using (Stream ostream = conn.OpenWrite("01-03-2017/John, Doe S. M.D/file.wav")) { 
        try { 
         // istream.Position is incremented accordingly to the writes you perform 
        } 
        finally { 
         ostream.Close(); 
        } 
       } 
      } 
     } 
    } 
} 

再者,如果該文件是一個二進制文件,StreamReader should not be used如下解釋。

相關問題