zoukankan      html  css  js  c++  java
  • C# FileStream进行FTP服务上传文件和下载文件

    定义FileStream类的操作类:操作类名: FtpUpDown

    上传文件

    /// <summary>

            /// 上传文件

            /// </summary>

            /// <param name="localpath">上传文件的全路径 例@"D:123.txt"</param>

            /// <param name="ftppath"></param>

            /// <returns></returns>

            public bool Upload(string localpath, string ftppath)

            {

                bool bol = false;

                try

                {

                    FileInfo fileInf = new FileInfo(localpath);

                    //替换符号

                    ftppath = ftppath.Replace("\", "/");

                    //组合ftp上传文件路径

                    string uri = "ftp://" + ftppath + "/" + fileInf.Name;

     

                    // 根据uri创建FtpWebRequest对象

                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

                    // 指定数据传输类型

                    reqFTP.UseBinary = true;

                    // ftp用户名和密码

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

                    // 默认为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);

                            bol = true;

                        }

                        // 关闭两个流

                        strm.Close();

                        fs.Close();

                    }

                    catch (Exception ex)

                    {

                        MessageBox.Show("上传文件失败,失败原因;" + ex.Message);

                    }

                }

                catch (Exception ex)

                {

                    MessageBox.Show("上传文件失败,失败原因;" + ex.Message);

                }

                return bol;

            }

    下载文件:

    /// <summary>

            /// 下载文件

            /// </summary>

            /// <param name="localpath"></param>

            /// <param name="fileName"></param>

            /// <param name="errorinfo"></param>

            /// <returns></returns>

            public bool Download(string localpath, string fileName, out string errorinfo)

            {

                try

                {

                    String onlyFileName = Path.GetFileName(fileName);

                    string newFileName = localpath + "\" + onlyFileName;

     

                    if (File.Exists(newFileName))

                    {

                        errorinfo = string.Format("本地文件{0}已存在,无法下载", newFileName);

                        return false;

                    }

                    string url = "ftp://" + ftpServerIP + "/FileInfo/" + fileName;

                    // 根据uri创建FtpWebRequest对象

                    reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));

                    // 指定数据传输类型

                    reqFTP.UseBinary = true;

                    // ftp用户名和密码

                    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, FileAccess.Write);

                    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;

                }

            }

    调用方法:

    /// <summary>

            /// 上传

            /// </summary>

            /// <param name="sender"></param>

            /// <param name="e"></param>

            private void Button_Click_1(object sender, RoutedEventArgs e)

            {

                FtpUpDown ftp = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);

                string localpath = @"D:123.txt";

                string ftppath =  ftpServerIP + @"FileInfo";

                bool bol = ftp.Upload(localpath, ftppath);

                if (bol == true)

                    MessageBox.Show("上传成功");

                else

                    MessageBox.Show("上传失败");

            }

     

            /// <summary>

            /// 下载

            /// </summary>

            /// <param name="sender"></param>

            /// <param name="e"></param>

            private void Button_Click_2(object sender, RoutedEventArgs e)

            {

                string errorinfo;

                string localpath = @"E:qzqFileInfo";

     

                if (!Directory.Exists(localpath))

                {

                    Directory.CreateDirectory(localpath);

                }

                string filename = "123.txt";

                if (!File.Exists(localpath + "\" + filename))

                {

     

                    FtpUpDown ftp = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);

                    bool bol = ftp.Download(localpath, filename, out errorinfo);

                    if (bol == true)

                        MessageBox.Show("下载成功");

                    else

                        MessageBox.Show("下载失败:" + errorinfo + "");

                }

                else

                {

                    MessageBox.Show("下载文件已存在!");

                }

            }

    其中: ftpServerIP:上传服务的IP地址。

          ftpUserID: 上传服务的登录名。

          ftpPassword: 上传服务的密码。

  • 相关阅读:
    win7(windows 7)系统下安装SQL2005(SQL Server 2005)图文教程( Win7 SQL Server2005 安装教程)
    PL/SQL -->隐式游标(SQL%FOUND)
    sql%found sql%notfound sql%rowcount sql%isopen
    C# WINFORM 窗体执行ORACLE存储过程 进行增删改查 自己编写借助网络(二)
    C# WINFORM 窗体执行ORACLE存储过程 进行增删改查 自己编写借助网络
    .net 接收存储过程的返回值 。。。。
    oracle-扫盲贴:存储过程实现增删改查
    sql加一个%号是什么意思
    关于ExecuteNonQuery执行存储过程的返回值 、、实例讲解存储过程的返回值与传出参数、、、C#获取存储过程的 Return返回值和Output输出参数值
    iOS网络请求之数据解析
  • 原文地址:https://www.cnblogs.com/wlming/p/8075216.html
Copyright © 2011-2022 走看看