zoukankan      html  css  js  c++  java
  • 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: 上传服务的密码

  • 相关阅读:
    各种计算
    C# 杂货
    Unity String格式化字符串
    unity 窗口化运行时取消边框
    WPF开机自启
    wpf 如何让当前窗口隐藏
    Unity 安卓杂货
    unity的一些杂货
    C# 项目中遇到过的坑(持续更新)
    C# 并入UI线程
  • 原文地址:https://www.cnblogs.com/xiaoyaohan/p/10157131.html
Copyright © 2011-2022 走看看