2012-11-07 45 views
-3

我想通过FTP上传一个文件夹(及其内容),但是当我尝试这样做时,我总是收到一条错误消息,说没有选中文件。如何通过FTP上传文件夹?

你知道有什么办法让它上传文件夹及其内容吗?

这是我使用的代码。 (我想所有的上传文件的文件夹插件中):

UploadFile(@"C:\\MainPlugins\\Plugins", "ftp://testsiteurl.com/public_html/wp-content/plugins/test plugin", "username", "password"); 

这是我使用的子:

public void UploadFile(string _FileName, string _UploadPath, string _FTPUser, string _FTPPass) 
{ 
    System.IO.FileInfo _FileInfo = new System.IO.FileInfo(_FileName); 

    // Create FtpWebRequest object from the Uri provided 
    System.Net.FtpWebRequest _FtpWebRequest = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(new Uri(_UploadPath)); 

    // Provide the WebPermission Credintials 
    _FtpWebRequest.Credentials = new System.Net.NetworkCredential(_FTPUser, _FTPPass); 

    // By default KeepAlive is true, where the control connection is not closed 
    // after a command is executed. 
    _FtpWebRequest.KeepAlive = false; 

    // set timeout for 20 seconds 
    _FtpWebRequest.Timeout = 20000; 

    // Specify the command to be executed. 
    _FtpWebRequest.Method = System.Net.WebRequestMethods.Ftp.UploadFile; 

    // Specify the data transfer type. 
    _FtpWebRequest.UseBinary = true; 

    // Notify the server about the size of the uploaded file 
    _FtpWebRequest.ContentLength = _FileInfo.Length; 

    // The buffer size is set to 2kb 
    int buffLength = 2048; 
    byte[] buff = new byte[buffLength]; 

    // Opens a file stream (System.IO.FileStream) to read the file to be uploaded 
    System.IO.FileStream _FileStream = _FileInfo.OpenRead(); 

    try 
    { 
     // Stream to which the file to be upload is written 
     System.IO.Stream _Stream = _FtpWebRequest.GetRequestStream(); 

     // Read from the file stream 2kb at a time 
     int contentLen = _FileStream.Read(buff, 0, buffLength); 

     // Till Stream content ends 
     while (contentLen != 0) 
     { 
      // Write Content from the file stream to the FTP Upload Stream 
      _Stream.Write(buff, 0, contentLen); 
      contentLen = _FileStream.Read(buff, 0, buffLength); 
     } 

     // Close the file stream and the Request Stream 
     _Stream.Close(); 
     _Stream.Dispose(); 
     _FileStream.Close(); 
     _FileStream.Dispose(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Upload Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

回答

1

你的URI是不正确,您需要在指定的文件名URI。

// Create FtpWebRequest object from the Uri provided 
    System.Net.FtpWebRequest _FtpWebRequest = (System.Net.FtpWebRequest)System.Net.FtpWebRequest.Create(new Uri(_UploadPath + "/" + _FileInfo.Name)); 

此外,考虑使用“使用”关键字为您的流妥善处置他们的情况下,例外。

using (System.IO.FileStream _FileStream = _FileInfo.OpenRead()) 
       { 

        // Stream to which the file to be upload is written 

        using (System.IO.Stream _Stream = _FtpWebRequest.GetRequestStream()) 
        { 
         // Read from the file stream 2kb at a time 
         int contentLen = _FileStream.Read(buff, 0, buffLength); 

         // Till Stream content ends 
         while (contentLen != 0) 
         { 
          // Write Content from the file stream to the FTP Upload Stream 
          _Stream.Write(buff, 0, contentLen); 
          contentLen = _FileStream.Read(buff, 0, buffLength); 
         } 

         //No need to Close the file stream and the Request Stream 

        } 
       } 
+0

我在哪里放置您创建的第一行代码?您不要调用子UploadFile。 –

+0

我仍然不能上传文件夹 –

+0

我只是在UploadFile方法中编辑了代码。 如果你想上传一个文件夹,你必须循环遍历循环中的文件夹中的文件,并事先使用Ftp.MakeDirectory方法。 无论哪种方式,这可能不是你想要如何上传文件。你应该修改你的方法是异步的。 – Mataniko