我在用C#做手机软件开发,需要向指定FTP服务器上传图片。 
    请问哪位高手能不能告诉我可以用那些FTP类?
    或者提供给我一些例子?
多谢了!!

解决方案 »

  1.   

    FtpWebRequest 类http://msdn.microsoft.com/zh-cn/library/system.net.ftpwebrequest(VS.80).aspx 
      

  2.   

    using System;
    using System.IO;
    using System.Net;
    using System.Net.Security;
    using System.Collections;
    using System.Collections.Generic;
    using System.Security.Cryptography.X509Certificates;
    using System.Web;
    using System.Web.Configuration;
      1  public sealed class FtpClientService
     2     {
     3         #region Internal Members
     4 
     5         private NetworkCredential certificate;
     6 
     7         #endregion
     8 
     9         /// <summary>
    10         /// 构造函数,提供初始化数据的功能,打开Ftp站点
    11         /// </summary>
    12         public FtpClientService()
    13         {
    14             certificate = new NetworkCredential(WebConfigurationManager.AppSettings["UserName"], WebConfigurationManager.AppSettings["PassWord"]);
    15         }
    16 
    17  /// <summary>
    18         /// 创建FTP请求
    19         /// </summary>
    20         /// <param name="uri">ftp://myserver/upload.txt</param>
    21         /// <param name="method">Upload/Download</param>
    22         /// <returns></returns>
    23         private FtpWebRequest CreateFtpWebRequest(Uri uri, string method)
    24         {
    25             FtpWebRequest ftpClientRequest = (FtpWebRequest)WebRequest.Create(uri);
    26 
    27             ftpClientRequest.Proxy = null;
    28             ftpClientRequest.Credentials = certificate;
    29             ftpClientRequest.KeepAlive = true;
    30             ftpClientRequest.UseBinary = true;
    31             ftpClientRequest.UsePassive = true;
    32             ftpClientRequest.Method = method;
    33 
    34             //ftpClientRequest.Timeout = -1;
    35 
    36             return ftpClientRequest;
    37         }
    38    #region 支持断点续传
    39 
    40         public bool UploadFile(string sourceFile, Uri destinationPath, int offSet,string ftpMethod)
    41         {
    42             try
    43             {
    44                 FileInfo file = new FileInfo(sourceFile);
    45                 Uri uri = new Uri(destinationPath.AbsoluteUri + "/" + file.Name);
    46                 FtpWebRequest request = CreateFtpWebRequest(uri, ftpMethod);
    47                 request.ContentOffset = offSet;
    48                 Stream requestStream = request.GetRequestStream();//需要获取文件的流
    49                 FileStream fileStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read);//创建存储文件的流
    50                 int sourceLength = (int)fileStream.Length;
    51                 offSet = CopyDataToDestination(fileStream, requestStream, offSet);
    52                 WebResponse response = request.GetResponse();
    53                 response.Close();
    54                 if (offSet != 0)
    55                 {
    56                     UploadFile(sourceFile, destinationPath, offSet, WebRequestMethods.Ftp.AppendFile);
    57                 }
    58             }
    59             catch(Exception ex)
    60             {
    61                 ex.ToString();
    62                 return false;
    63             }
    64 
    65             return true;
    66         }
    67 
    68         private int CopyDataToDestination(Stream sourceStream, Stream destinationStream, int offSet)
    69         {
    70             try
    71             {
    72                 int sourceLength = (int)sourceStream.Length;
    73                 int length = sourceLength - offSet;
    74                 byte[] buffer = new byte[length + offSet];
    75                 int bytesRead = sourceStream.Read(buffer, offSet, length);
    76                 while (bytesRead != 0)
    77                 {
    78                     destinationStream.Write(buffer, 0, bytesRead);
    79                     bytesRead = sourceStream.Read(buffer, 0, length);
    80                     length = length - bytesRead;
    81                     offSet = (bytesRead == 0) ? 0 : (sourceLength - length);//(length - bytesRead);                  
    82                 }
    83             }
    84             catch(Exception ex)
    85             {
    86                 string error = ex.ToString();
    87                 return offSet;
    88             }
    89             finally
    90             {
    91                 destinationStream.Close();
    92                 sourceStream.Close();
    93             }
    94             return offSet;
    95         }
    96      #endregion
    97     }//这里是一段上面的测试代码
    private FtpClientService ftpClient; [TestMethod]
            public void UploadFileSupportFitfulTest()
            {
                ftpClient = new FtpClientService();
                           ftpClient.UploadFile(@"\\10.16.174.31\NeweggPictures\newEgg\ProdTourOff.gif", new Uri("ftp://10.16.50.189/SlaveImageServer/NewEgg/GroupFTPTest/"), 0, WebRequestMethods.Ftp.UploadFile);
      

  3.   

    前台页面源码: 
     <tr>
        <td class="td" style="height: 25px; width: 76px;">产品图片:</td>
        <td style="height: 25px"><input type="file" name="file5" id="upfile" runat="server" class="kuang" />(图片格式:.jpg,.gif)
          <input type="submit" name="Submit4" id="btnupfile" runat="server" value="上传"  class="btn" onserverclick="btnupfile_ServerClick"/>
            <asp:Label ID="lblproimage" runat="server" Text=""></asp:Label></td>
      </tr>===========================================================================================================后台代码:
     protected void btnupfile_ServerClick(object sender, EventArgs e)
        {
            HttpPostedFile hpf = this.upfile.PostedFile;
            string FileSize = Convert.ToString(Convert.ToInt32(hpf.ContentLength.ToString()) / 1024) + "KB";
            //取得文件名(不含路径)
            char[] de ={ '\\' };
            string[] AFilename = hpf.FileName.Split(de);
            string strFilename = DateTime.Now.ToString().Replace("-", "").Replace(" ", "").Replace(":", "") + AFilename[AFilename.Length - 1];
            if (strFilename.Substring(strFilename.LastIndexOf('.') + 1) == "jpg" || strFilename.Substring(strFilename.LastIndexOf('.') + 1) == "gif")
            {
                hpf.SaveAs(Server.MapPath(".") + "\\proimage\\" + strFilename);
                Session["FileName"] = strFilename;
                this.lblproimage.Text = "图片名:" + strFilename.ToString();
                ClientScript.RegisterStartupScript(this.GetType(), null, "<script>alert(\"图片上传成功!\");</script>");
                return;
            }
            else
            {
                ClientScript.RegisterStartupScript(this.GetType(), null, "<script>alert(\"图片格式不正确!\");</script>");
                return;
            }
        }
      

  4.   

    Socket自定义协议,用HTTP或FTP服务器,那就用Wininet函数相应的函数。