zoukankan      html  css  js  c++  java
  • FTP上传类

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Web;

    namespace FTPHelper
    {
    //本文由MosCMS贡献
    public class FTP_Class
    {
    private string ftpServerIP;
    private string ftpUserID;
    private string ftpPassword;
    FtpWebRequest reqFTP;
    public void Connecttest(string ftpServerIP, string ftpUserId, string ftppassword)
    {
    // 根据uri创建FtpWebRequest对象
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP));
    // 指定数据传输类型
    reqFTP.UseBinary = true;
    ftpUserID = ftpUserId;
    ftpPassword = ftppassword;
    // ftp用户名和密码
    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

    }
    #region 连接
    private void Connect(String path)//连接ftp
    {
    // 根据uri创建FtpWebRequest对象
    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(path));
    // 指定数据传输类型
    reqFTP.UseBinary = true;
    // ftp用户名和密码
    reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
    }
    #endregion
    #region ftp登录信息
    public void FtpUpDown(string ftpServerIP, string ftpUserID, string ftpPassword)
    {
    this.ftpServerIP = ftpServerIP;
    this.ftpUserID = ftpUserID;
    this.ftpPassword = ftpPassword;
    }
    #endregion
    #region 获取文件列表

    /// 获取文件列表
    private string[] GetFileList(string path, string WRMethods)//上面的代码示例了如何从ftp服务器上获得文件列表
    {
    string[] downloadFiles;
    StringBuilder result = new StringBuilder();
    try
    {
    Connect(path);
    reqFTP.Method = WRMethods;
    WebResponse response = reqFTP.GetResponse();
    StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8);//中文文件名
    string line = reader.ReadLine();
    while (line != null)
    {
    result.Append(line);
    result.Append(" ");
    line = reader.ReadLine();
    }
    // to remove the trailing ' '
    result.Remove(result.ToString().LastIndexOf(' '), 1);
    reader.Close();
    response.Close();
    return result.ToString().Split(' ');
    }
    catch (Exception ex)
    {
    System.Windows.Forms.MessageBox.Show(ex.Message);
    downloadFiles = null;
    return downloadFiles;
    }
    }
    public string[] GetFileList(string path)//上面的代码示例了如何从ftp服务器上获得文件列表
    {
    return GetFileList("ftp://" + ftpServerIP + "/" + path, WebRequestMethods.Ftp.ListDirectory);
    }
    public string[] GetFileList()//上面的代码示例了如何从ftp服务器上获得文件列表
    {
    return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectory);
    }
    #endregion

    #region 上传文件
    public bool Upload(string filename, string path, out string errorinfo) //上面的代码实现了从ftp服务器上载文件的功能
    {
    path = path.Replace("\", "/");
    FileInfo fileInf = new FileInfo(filename);
    string uri = "ftp://" + path + "/" + 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();
    errorinfo = "完成";
    return true;
    }
    catch (Exception ex)
    {
    errorinfo = string.Format("因{0},无法完成上传", ex.Message);
    return false;
    }
    }
    #endregion
    #region 续传文件
    public bool Upload(string filename, long size, string path, out string errorinfo) //上面的代码实现了从ftp服务器上载文件的功能
    {
    path = path.Replace("\", "/");
    FileInfo fileInf = new FileInfo(filename);
    //string uri = "ftp://" + path + "/" + fileInf.Name;
    string uri = "ftp://" + path;
    Connect(uri);//连接
    // 默认为true,连接不会被关闭
    // 在一个命令之后被执行
    reqFTP.KeepAlive = false;
    // 指定执行什么命令
    reqFTP.Method = WebRequestMethods.Ftp.AppendFile;
    // 上传文件时通知服务器文件的大小
    reqFTP.ContentLength = fileInf.Length;
    // 缓冲大小设置为kb
    int buffLength = 2048;
    byte[] buff = new byte[buffLength];
    int contentLen;
    // 打开一个文件流(System.IO.FileStream) 去读上传的文件
    FileStream fs = fileInf.OpenRead();
    try
    {
    StreamReader dsad = new StreamReader(fs);
    fs.Seek(size, SeekOrigin.Begin);
    // 把上传的文件写入流
    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();
    errorinfo = "完成";
    return true;
    }
    catch (Exception ex)
    {
    errorinfo = string.Format("因{0},无法完成上传", ex.Message);
    return false;
    }
    }
    #endregion
    #region 下载文件
    public bool Download(string ftpfilepath, string filePath, string fileName, out string errorinfo)////上面的代码实现了从ftp服务器下载文件的功能
    {
    try
    {
    filePath = filePath.Replace("我的电脑\", "");
    String onlyFileName = Path.GetFileName(fileName);
    string newFileName = filePath + onlyFileName;
    if (File.Exists(newFileName))
    {
    errorinfo = string.Format("本地文件{0}已存在,无法下载", newFileName);
    return false;
    }
    ftpfilepath = ftpfilepath.Replace("\", "/");
    string url = "ftp://" + ftpfilepath;
    Connect(url);//连接

    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[bufferSize];
    readCount = ftpStream.Read(buffer, 0, bufferSize);
    FileStream outputStream = new FileStream(newFileName, FileMode.Create);
    while (readCount > 0)
    {
    outputStream.Write(buffer, 0, readCount);
    readCount = ftpStream.Read(buffer, 0, bufferSize);
    }
    ftpStream.Close();
    outputStream.Close();
    response.Close();
    errorinfo = "";
    return true;
    }
    catch (Exception ex)
    {
    errorinfo = string.Format("因{0},无法下载", ex.Message);
    return false;
    }
    }
    #endregion
    #region 删除文件
    public void DeleteFileName(string fileName)
    {
    try
    {
    FileInfo fileInf = new FileInfo(fileName);
    string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
    Connect(uri);//连接
    // 默认为true,连接不会被关闭
    // 在一个命令之后被执行
    reqFTP.KeepAlive = false;
    // 指定执行什么命令
    reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    response.Close();
    }
    catch (Exception ex)
    {
    //MessageBox.Show(ex.Message, "删除错误");
    }
    }
    #endregion
    #region 在ftp上创建目录
    public void MakeDir(string dirName)
    {
    try
    {
    string uri = "ftp://" + ftpServerIP + "/" + dirName;
    Connect(uri);//连接
    reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory;
    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    response.Close();
    }
    catch (Exception ex)
    {
    // MessageBox.Show(ex.Message);
    }
    }
    #endregion
    #region 删除ftp上目录
    public void delDir(string dirName)
    {
    try
    {
    string uri = "ftp://" + ftpServerIP + "/" + dirName;
    Connect(uri);//连接
    reqFTP.Method = WebRequestMethods.Ftp.RemoveDirectory;
    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    response.Close();
    }
    catch (Exception ex)
    {
    }
    }
    #endregion
    #region 获得ftp上文件大小
    public long GetFileSize(string filename)
    {
    long fileSize = 0;
    filename = filename.Replace("\", "/");
    try
    {
    // FileInfo fileInf = new FileInfo(filename);

    //string uri1 = "ftp://" + ftpServerIP + "/" + fileInf.Name;
    // string uri = filename;
    string uri = "ftp://" + filename;
    Connect(uri);//连接
    reqFTP.Method = WebRequestMethods.Ftp.GetFileSize;
    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    fileSize = response.ContentLength;
    response.Close();
    }
    catch (Exception ex)
    {
    // MessageBox.Show(ex.Message);
    }
    return fileSize;
    }
    #endregion
    #region ftp上文件改名
    public void Rename(string currentFilename, string newFilename)
    {
    try
    {
    FileInfo fileInf = new FileInfo(currentFilename);
    string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
    Connect(uri);//连接
    reqFTP.Method = WebRequestMethods.Ftp.Rename;
    reqFTP.RenameTo = newFilename;
    FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
    //Stream ftpStream = response.GetResponseStream();
    //ftpStream.Close();
    response.Close();
    }
    catch (Exception ex)
    {
    // MessageBox.Show(ex.Message);
    }
    }
    #endregion
    #region 获得文件明晰
    public string[] GetFilesDetailList()
    {
    return GetFileList("ftp://" + ftpServerIP + "/", WebRequestMethods.Ftp.ListDirectoryDetails);
    }
    public string[] GetFilesDetailList(string path)
    {
    path = path.Replace("\", "/");
    return GetFileList("ftp://" + path, WebRequestMethods.Ftp.ListDirectoryDetails);
    }
    #endregion
    }
    }

  • 相关阅读:
    安装 kubenetes-dashboard
    使用kubeadm在Centos7上部署kubernetes1.21.1
    批量重命名
    is_valid重写。返回数据格式统一
    django-序列化参数为空报错问题
    单文件日志测试
    文本、目录 空间清理问题
    数仓数据
    滑动验证码(无原图片处理)
    鸟哥私房菜基础篇
  • 原文地址:https://www.cnblogs.com/feige/p/5554402.html
Copyright © 2011-2022 走看看