wocaosinima 发表于 2015-5-27 07:31:45

asp.net (网页中操作FTP)

C#2.0中增加了对FTP操作的支持。
在网上搜到了www.knowsky.com/343881.html,这篇文章对于ftp操作做了简单的介绍。

我根据这个介绍,将其转化到网页中来,从而完成我们现在项目的需求。

在这个项目中,我使用了三种方法:List ,upload还是download。

后台代码:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Net;
using System.Text;

public partial class _Default : System.Web.UI.Page
{
    string ftpServerIP = "59.125.163.103";
    string ftpUserID = "vtek";
    string ftpPassword = "vtek_admin";
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    private void Upload(string filename)
    {
      FileInfo fileInf = new FileInfo(filename);
      string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
      FtpWebRequest reqFTP;

      // 根据uri创建FtpWebRequest对象
      reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));

      // ftp用户名和密码
      reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

      // 默认为true,连接不会被关闭
      // 在一个命令之后被执行
      reqFTP.KeepAlive = false;

      // 指定执行什么命令
      reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

      // 指定数据传输类型
      reqFTP.UseBinary = true;

      // 上传文件时通知服务器文件的大小
      reqFTP.ContentLength = fileInf.Length;

      // 缓冲大小设置为2kb
      int buffLength = 2048;

      byte[] buff = new byte;
      int contentLen;

      // 打开一个文件流 (System.IO.FileStream) 去读上传的文件
      FileStream fs = fileInf.OpenRead();
      try
      {
            // 把上传的文件写入流
            Stream strm = reqFTP.GetRequestStream();

            // 每次读文件流的2kb
            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)
      {
            //MessageBox.Show(ex.Message, "Upload Error");
            Response.Write(ex.Message);
      }
    }
    private void Download(string filePath, string fileName)
    {

      FtpWebRequest reqFTP;

      try
      {

            //filePath = ,

            //fileName =

            FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);

            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName));

            reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;

            reqFTP.UseBinary = true;

            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

            FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

            Stream ftpStream = response.GetResponseStream();

            long cl = response.ContentLength;

            int bufferSize = 2048;

            int readCount;

            byte[] buffer = new byte;


            readCount = ftpStream.Read(buffer, 0, bufferSize);

            while (readCount > 0)
            {

                outputStream.Write(buffer, 0, readCount);

                readCount = ftpStream.Read(buffer, 0, bufferSize);

            }


            ftpStream.Close();

            outputStream.Close();

            response.Close();

      }

      catch (Exception ex)
      {

         Response.Write(ex.Message);

      }




    }


    public string[] GetFileList()
    {
      string[] downloadFiles = new string;
      StringBuilder result = new StringBuilder();
      FtpWebRequest reqFTP;
      try
      {
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/"));
            reqFTP.UseBinary = true;
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
            WebResponse response = reqFTP.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream());
            string line = reader.ReadLine();
            while (line != null)
            {
                result.Append(line);
                result.Append("\n");
                line = reader.ReadLine();
            }
            // to remove the trailing '\n'      
            result.Remove(result.ToString().LastIndexOf('\n'), 1);
            reader.Close();
            response.Close();
            return result.ToString().Split('\n');
      }
      catch (Exception ex)
      {
            Response.Write(ex.Message);
            downloadFiles = null;
            return downloadFiles;
      }
    }




    protected void Button1_Click(object sender, EventArgs e)
    {
      //string[] result=this.GetFileList();

      //if (result.Length > 0)
      //    foreach (string s in result)
      //    {
      //      Response.Write(s + "");
      //    }

      //this.Download("d:\\", "sp.sql");
       this.Upload("d:\\shipfa");
    }
}


前台代码:







    无标题页


   
   
      
   
   


源码下载:
/Files/xxpyeippx/WebSite2.rar
页: [1]
查看完整版本: asp.net (网页中操作FTP)