FTp上传文件,创建文件夹

   FtpWebRequest reqFTP;
  public void Upload(string filename)
      {
          FileInfo fileInf = new FileInfo(filename);
          string localFile = ftpFilePath + "/" + DateTime.Now.Year;
          if(!Check(localFile)) //判断是否存在该文件夹
          {
              FtpMakeDir(localFile); //创建文件夹 因为一次只能创建一个文件夹,我想创建三层所以就写了三个判断
          }
          localFile = localFile + "/" + DateTime.Now.Month;
          if(!Check(localFile)) //判断是否存在该文件夹
          {
              FtpMakeDir(localFile); //创建文件夹
          }
          localFile = localFile + "/" + DateTime.Now.Day;
          if(!Check(localFile)) //判断是否存在该文件夹
          {
              FtpMakeDir(localFile); //创建文件夹
          }
          string uri = "ftp://" + ftpServerIP + "/" + localFile + "/" + fileInf.Name;
          Connect(uri); //连接
          // 默认为true,连接不会被关闭
          // 在一个命令之后被执行
          reqFTP.KeepAlive = false;
          // 指定执行什么命令
          reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
          // 上传文件时通知服务器文件的大小
          reqFTP.ContentLength = fileInf.Length;
          // 缓冲大小设置为kb
          int buffLength = 2048;
          byte[] buff = new byte[buffLength];
          int contentLen;
          // 打开一个文件流(System.IO.FileStream) 去读上传的文件
          FileStream fs = fileInf.OpenRead();
          try
          {
              // 把上传的文件写入流
              Stream strm = reqFTP.GetRequestStream();
              // 每次读文件流的kb
              contentLen = fs.Read(buff, 0, buffLength);
              // 流内容没有结束
              while(contentLen != 0)
              {
                  // 把内容从file stream 写入upload stream
                  strm.Write(buff, 0, contentLen);
                  contentLen = fs.Read(buff, 0, buffLength);
              }
              // 关闭两个流
              strm.Close();
              fs.Close();
          }
          catch(Exception ex)
          {
              CommonHelper.PrintLog("FTP传输文件出错!");
          }
      }
      //判断是否存在该文件
  public Boolean Check(string localFile)
      {
          bool flag = true;
          try
          {
              reqFTP = (FtpWebRequest) WebRequest.Create("ftp://" + ftpServerIP + "/" + localFile);
              reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
              reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
              FtpWebResponse response = (FtpWebResponse) reqFTP.GetResponse();
              response.Close();
          }
          catch(Exception)
          {
              reqFTP.Abort();
              flag = false;
          }
          return flag;
      }
      //创建目录
  public Boolean FtpMakeDir(string localFile)
      {
          reqFTP = (FtpWebRequest) WebRequest.Create("ftp://" + ftpServerIP + "/" + localFile);
          CommonHelper.PrintLog("创建路径" + "ftp://" + ftpServerIP + "/" + localFile);
          reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
          reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
          try
          {
              reqFTP.UsePassive = true;
              reqFTP.UseBinary = false;
              reqFTP.KeepAlive = false;
              FtpWebResponse response = (FtpWebResponse) reqFTP.GetResponse();
              response.Close();
          }
          catch(Exception ex)
          {
              CommonHelper.PrintLog("创建文件报错" + ex.ToString());
              reqFTP.Abort();
              return false;
          }
          reqFTP.Abort();
          return true;
      }
      /// <summary>
      /// FTP连接
      /// </summary>
      /// <param name="path"></param>
  public void Connect(string path)
  {
      // 根据uri创建FtpWebRequest对象
      reqFTP = (FtpWebRequest) FtpWebRequest.Create(new Uri(path));
      // 指定数据传输类型
      reqFTP.UseBinary = true;
      // ftp用户名和密码
      reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
  }

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值