C# FTP Web版

Web.Config

    
    
    
    
    
    

上传页面

using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebUtility;

namespace PlatForm
{
    public partial class FTPDemo : System.Web.UI.Page
    {
        private string FtpServerIP = ConfigurationManager.AppSettings["FtpServerIP"];
        private string FtpUserID = ConfigurationManager.AppSettings["FtpUserID"];
        private string FtpPassword = ConfigurationManager.AppSettings["FtpPassword"];

        protected void Page_Load(object sender, EventArgs e)
        {
            string ftpPath = string.Empty;
            #region 上传
            if (File.Exists("D:\\1.txt"))
            {
                try
                {
                    FTPHelper helper = new FTPHelper(FtpServerIP, "", FtpUserID, FtpPassword);
                    ftpPath = helper.Upload("D:\\1.txt", "MainPlan");
                }
                catch (Exception ex)
                {

                }
            }
            #endregion
        }
    }
}
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FTPDemo.aspx.cs" Inherits="PlatForm.FTPDemo" %>






    
    


    

下载页面

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebUtility;

namespace PlatForm
{
    public partial class FTPDownload : System.Web.UI.Page
    {
        private string FtpServerIP = ConfigurationManager.AppSettings["FtpServerIP"];
        private string FtpUserID = ConfigurationManager.AppSettings["FtpUserID"];
        private string FtpPassword = ConfigurationManager.AppSettings["FtpPassword"];
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                string ftpPath = Request.QueryString["ftpPath"];
                string dirName = Request.QueryString["dirName"];
                string displayName = Request.QueryString["displayName"];
                #region 下载
                FTPHelper helper = new FTPHelper(FtpServerIP, dirName, FtpUserID, FtpPassword);
                helper.Download(Request, Response, Server, displayName, ftpPath);
                #endregion
            }
        }
    }
}

FTPHelper

using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;


namespace WebUtility
{
    public class FTPHelper
    {
        private string FtpTempFile = ConfigurationManager.AppSettings["FtpTempFile"];
        #region 字段
        string ftpURI;
        string ftpUserID;
        string ftpServerIP;
        string ftpPassword;
        string ftpRemotePath;
        #endregion

        ///   
        /// 连接FTP服务器
        ///   
        /// FTP连接地址  
        /// 指定FTP连接成功后的当前目录, 如果不指定即默认为根目录  
        /// 用户名  
        /// 密码  
        public FTPHelper(string FtpServerIP, string FtpRemotePath, string FtpUserID, string FtpPassword)
        {
            ftpServerIP = FtpServerIP;
            ftpRemotePath = FtpRemotePath;
            ftpUserID = FtpUserID;
            ftpPassword = FtpPassword;
            ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
        }

        /// 
        /// 上传
        /// 
        /// 上传文件路径
        /// ftp目录
        /// 文件ftp路径
        public string Upload(string filename, string ftpDir)
        {
            #region 创建目录并跳转到目录
            this.MakeDir(ftpDir);
            this.GotoDirectory(ftpDir, false);
            #endregion
            string ftpPath = string.Empty;
            FileInfo fileInf = new FileInfo(filename);
            FtpWebRequest reqFTP;
            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileInf.Name));
            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
            reqFTP.KeepAlive = false;
            reqFTP.UseBinary = true;
            reqFTP.ContentLength = fileInf.Length;
            int buffLength = 2048;
            byte[] buff = new byte[buffLength];
            int contentLen;
            FileStream fs = fileInf.OpenRead();
            try
            {
                Stream strm = reqFTP.GetRequestStream();
                contentLen = fs.Read(buff, 0, buffLength);
                while (contentLen != 0)
                {
                    strm.Write(buff, 0, contentLen);
                    contentLen = fs.Read(buff, 0, buffLength);
                }
                strm.Close();
                fs.Close();
                ftpPath = Path.Combine(ftpURI, Path.GetFileName(filename));
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            return ftpPath;
        }

        /// 
        /// 下载ftp文件
        /// 
        /// 
        /// 文件ftp路径
        /// 返回下载文件路径
        public string ftpDownload(System.Web.HttpServerUtility Server, string ftpPath)
        {
            string tempPath = string.Empty;
            string tempFile = string.Empty;
            FileStream outputStream = null;
            try
            {
                string fileName = Path.GetFileName(ftpPath);
                #region web服务器创建零时文件夹
                string tempDir = Server.MapPath("~/" + FtpTempFile);
                if (!Directory.Exists(tempDir))
                    Directory.CreateDirectory(tempDir);
                #endregion
                tempFile = Path.Combine(tempDir, fileName);
                if (File.Exists(tempFile))
                    return tempFile;
                outputStream = new FileStream(tempFile, FileMode.Create);
                FtpWebRequest reqFTP;
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath));
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
                reqFTP.UseBinary = true;
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                long cl = response.ContentLength;
                int bufferSize = 2048;
                int readCount;
                byte[] buffer = new byte[bufferSize];
                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();
                tempPath = tempFile;
            }
            catch (Exception ex)
            {
                outputStream.Close();
                File.Delete(tempFile);
                //throw new Exception(ex.Message);
            }
            return tempPath;
        }

        ///   
        /// 删除文件  
        ///   
        public void Delete(string fileName)
        {
            try
            {
                FtpWebRequest reqFTP;
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + fileName));
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
                reqFTP.KeepAlive = false;
                string result = String.Empty;
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                long size = response.ContentLength;
                Stream datastream = response.GetResponseStream();
                StreamReader sr = new StreamReader(datastream);
                result = sr.ReadToEnd();
                sr.Close();
                datastream.Close();
                response.Close();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        ///   
        /// 获取当前目录下明细(包含文件和文件夹)  
        ///   
        public string[] GetFilesDetailList()
        {
            try
            {
                StringBuilder result = new StringBuilder();
                FtpWebRequest ftp;
                ftp = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI));
                ftp.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                ftp.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                WebResponse response = ftp.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream());
                string line = reader.ReadLine();
                line = reader.ReadLine();
                line = reader.ReadLine();
                while (line != null)
                {
                    result.Append(line);
                    result.Append("\n");
                    line = reader.ReadLine();
                }
                result.Remove(result.ToString().LastIndexOf("\n"), 1);
                reader.Close();
                response.Close();
                return result.ToString().Split('\n');
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        ///   
        /// 获取FTP文件列表(包括文件夹)
        ///    
        private string[] GetAllList(string url)
        {
            List list = new List();
            FtpWebRequest req = (FtpWebRequest)WebRequest.Create(new Uri(url));
            req.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
            req.Method = WebRequestMethods.Ftp.ListDirectory;
            req.UseBinary = true;
            req.UsePassive = true;
            try
            {
                using (FtpWebResponse res = (FtpWebResponse)req.GetResponse())
                {
                    using (StreamReader sr = new StreamReader(res.GetResponseStream()))
                    {
                        string s;
                        while ((s = sr.ReadLine()) != null)
                        {
                            list.Add(s);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw (ex);
            }
            return list.ToArray();
        }

        ///   
        /// 获取当前目录下文件列表(不包括文件夹)  
        ///   
        public string[] GetFileList(string url)
        {
            StringBuilder result = new StringBuilder();
            FtpWebRequest reqFTP;
            try
            {
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                reqFTP.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                WebResponse response = reqFTP.GetResponse();
                StreamReader reader = new StreamReader(response.GetResponseStream());
                string line = reader.ReadLine();
                while (line != null)
                {

                    if (line.IndexOf("") == -1)
                    {
                        result.Append(Regex.Match(line, @"[\S]+ [\S]+", RegexOptions.IgnoreCase).Value.Split(' ')[1]);
                        result.Append("\n");
                    }
                    line = reader.ReadLine();
                }
                if (result.ToString().IndexOf('\n') != -1)
                    result.Remove(result.ToString().LastIndexOf('\n'), 1);
                reader.Close();
                response.Close();
            }
            catch (Exception ex)
            {
                throw (ex);
            }
            return result.ToString().Split('\n');
        }

        ///   
        /// 判断当前目录下指定的文件是否存在  
        ///   
        /// 远程文件名  
        public bool FileExist(string RemoteFileName)
        {
            string[] fileList = GetFileList(ftpURI);
            foreach (string str in fileList)
            {
                if (str.Trim() == RemoteFileName.Trim())
                {
                    return true;
                }
            }
            return false;
        }

        ///   
        /// 创建文件夹  
        ///    
        public void MakeDir(string dirName)
        {
            FtpWebRequest reqFTP;
            try
            {
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + dirName));
                reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                ftpStream.Close();
                response.Close();
            }
            catch (Exception ex)
            { }
        }

        ///   
        /// 获取指定文件大小  
        ///   
        public long GetFileSize(string filename)
        {
            FtpWebRequest reqFTP;
            long fileSize = 0;
            try
            {
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + filename));
                reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                fileSize = response.ContentLength;
                ftpStream.Close();
                response.Close();
            }
            catch (Exception ex)
            { }
            return fileSize;
        }

        ///   
        /// 更改文件名  
        ///  
        public void ReName(string currentFilename, string newFilename)
        {
            FtpWebRequest reqFTP;
            try
            {
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpURI + currentFilename));
                reqFTP.Method = WebRequestMethods.Ftp.Rename;
                reqFTP.RenameTo = newFilename;
                reqFTP.UseBinary = true;
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
                FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
                Stream ftpStream = response.GetResponseStream();
                ftpStream.Close();
                response.Close();
            }
            catch (Exception ex)
            { }
        }

        ///   
        /// 移动文件  
        ///   
        public void MovieFile(string currentFilename, string newDirectory)
        {
            ReName(currentFilename, newDirectory);
        }

        ///   
        /// 切换当前目录  
        ///   
        /// true:绝对路径 false:相对路径   
        public void GotoDirectory(string DirectoryName, bool IsRoot)
        {
            if (IsRoot)
            {
                ftpRemotePath = DirectoryName;
            }
            else
            {
                ftpRemotePath += DirectoryName + "/";
            }
            ftpURI = "ftp://" + ftpServerIP + "/" + ftpRemotePath + "/";
        }
        #region Web下载文件
        /// 
        /// 抛出文件
        /// 
        /// 
        /// 
        /// 
        /// 文件显示名称
        /// 文件ftp路径
        public void Download(System.Web.HttpRequest Request, System.Web.HttpResponse Response, System.Web.HttpServerUtility Server, string DisplayName, string ftpPath)
        {
            //下载ftp文件
            string path = this.ftpDownload(Server, ftpPath);
            if (!string.IsNullOrEmpty(path))
            {
                string fileName = Path.GetFileName(path);
                if (File.Exists(path))
                {
                    if (Request.UserAgent.ToLower().IndexOf("msie") > -1)
                    {
                        fileName = ToHexString(fileName);
                    }
                    System.IO.FileInfo file = new System.IO.FileInfo(path);
                    Response.Clear();
                    // Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);//设置读取的文件头   使用file.Name 会造成中文名乱码
                    if (Request.UserAgent.ToLower().IndexOf("firefox") > -1)
                    {
                        //为了向客户端输出空格,需要在当客户端使用 Firefox 时特殊处理   
                        Response.AddHeader("Content-Disposition", "attachment;filename=\"" + ToHexString(DisplayName) + "\"");
                    }
                    else
                    {
                        Response.AddHeader("Content-Disposition", "attachment;filename=" + ToHexString(DisplayName));
                    }
                    Response.AddHeader("Content-Length", file.Length.ToString());
                    Response.ContentType = "application/octet-stream";//设置输出类型 这里可以保存在数据库中 动态实现类型
                    Response.WriteFile(file.FullName);//输出 
                    Response.End();
                }
                else
                {
                    Response.Write("文件不存在");
                    Response.End();
                }
            }
            else
            {
                Response.Write("文件不存在");
                Response.End();
            }
        }
        /// 
        /// 为字符串中的非英文字符编码
        /// 
        /// 
        /// 
        private string ToHexString(string s)
        {
            char[] chars = s.ToCharArray();
            StringBuilder builder = new StringBuilder();
            for (int index = 0; index < chars.Length; index++)
            {
                bool needToEncode = NeedToEncode(chars[index]);
                if (needToEncode)
                {
                    string encodedString = ToHexString(chars[index]);
                    builder.Append(encodedString);
                }
                else
                {
                    builder.Append(chars[index]);
                }
            }
            return builder.ToString();
        }
        /// 
        ///指定 一个字符是否应该被编码
        /// 
        /// 
        /// 
        private bool NeedToEncode(char chr)
        {
            string reservedChars = "$-_.+!*'(),@=&";
            if (chr > 127)
                return true;
            if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0)
                return false;
            return true;
        }
        /// 
        /// 为非英文字符串编码
        /// 
        /// 
        /// 
        private string ToHexString(char chr)
        {
            UTF8Encoding utf8 = new UTF8Encoding();
            byte[] encodedBytes = utf8.GetBytes(chr.ToString());
            StringBuilder builder = new StringBuilder();
            for (int index = 0; index < encodedBytes.Length; index++)
            {
                builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16));
            }
            return builder.ToString();
        }
        #endregion
    }
}

 

你可能感兴趣的:(c#,web)