ASP.NET如何实现FTP上传文件

 

文章转载自:  ASP.NET实现FTP上传文件      http://www.studyofnet.com/news/170.html

 

ASP.NET实现的方式是:建立一个 FtpWebRequest 的实例,将IP、端口号、用户名、密码、数据、上传路径、上传文件等等复制给该实例,然后检查服务上是否有该目录,如果没有,就依次创建该目录,最后通过 FtpWebRequest 的实例的 GetRequestStream 方法远程上传文件。

 

其实现代码为:

 

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

namespace FTPNS
{
   public class FTPClass
   {
      private string Host='';//FTP主机IP
       
      private string Port='';//FTP主机端口号
       private string UserName='';//FTP主机登录用户名
       private string Userpwd='';//FTP主机登录密码
       private string UploadData='';//FTP上传数据
       private string RemoteFileName='';//FTP上传文件名       
       private string RemoteDir='';//FTP上传目录

        /** <summary>
       /// 创建FTP目录
        /// </summary>
       public static void MakeFTPDirectory()
       {
            FtpWebRequest req;
            FtpWebResponse response=null;

            req = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + Host + ":" + Port + "/" + RemoteDir));//初始化ftp目标   
             req.Credentials = new NetworkCredential(UserName, Userpwd);
            req.Method = WebRequestMethods.Ftp.ListDirectory;
            bool bDirExists = true ;
            try
            {
                response = req.GetResponse() as FtpWebResponse;
            }
            catch
            {
                bDirExists = false;
            }
            finally
            {
                if (response != null)
                    response.Close();
            }
            if (bDirExists )
            {
               return
            }

            string[] dirList = RemoteDir.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries);
            string curDir = "/";
            for (int i = 0; i < dirList.Length; i++)
            {
                string dir = dirList[i];
                // 如果是以/开始的路径,第一个为空  
                   if (dir != null && dir.Length > 0)
                {
                    curDir += dir + "/";
                    req = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + Host + ":" + Port + "/" + curDir));   
                     req.Credentials = new NetworkCredential(UserName, Userpwd);
                    req.Method = WebRequestMethods.Ftp.MakeDirectory;

                    try
                    { 
                        response = req.GetResponse() as FtpWebResponse;
                    }
                    catch
                    {
 
                    }
                    finally
                    {
                        if(response !=null )
                            response.Close();
                    }
                }
            }
        }
        
        public static void FTPUploadFile()
        {             
            try
            {
                MakeFTPDirectory();

                string serverPath = "ftp://" + Host + ":" + Port + "/" + RemoteDir.Replace ('\\\\','/');
                if (!serverPath.EndsWith("/"))
                    serverPath += "/";

                serverPath += RemoteFileName;

                FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(new Uri(serverPath ));   
                req.Method = WebRequestMethods.Ftp.UploadFile;  
                req.UseBinary =true;
                req.Credentials = new NetworkCredential(UserName, Userpwd);// 登录凭证   
                 req.ContentLength = UploadData.Length;
                int bufferSize = 4096;
                int length;
                byte[] buffer = new byte[bufferSize];
                int seek = 0;
                // 将文件流存在FileStream中   
                  using (MemoryStream fs = new MemoryStream(UploadData))
                {
                    // 上传流指向Stream   
                    using (Stream stream = req.GetRequestStream())
                    {
                        // 读取文件流中最大长度为bufferSize字节内容至buffer,读取长度返回至length   
                        length = fs.Read(buffer, 0, bufferSize);
                        // 如果读取到了内容   
                             while (length != 0)
                        {
                            //buffer写入上传流   
                                 stream.Write(buffer, 0, length);
                                 seek += length;
                            //继续读取   
                                 length = fs.Read(buffer, 0, bufferSize);
                        }
                    }
                }
                FtpWebResponse response = req.GetResponse() as FtpWebResponse;
                response.Close();
            }
            catch (Exception e)
            {
               
            }
        }    
    }
} 

 

C#写的ASP.NET上传到FTP上,文件,文件夹都可以。 首先,选择本地文件或者文件夹,然后点击上传按钮以后,有一个压缩过程,该过程也有一个实时更新的进度条,并可以显示压缩所需的实时更新的剩余时间,压缩完成以后上传,上传也是有一个实时更新的进度条,显示剩余上传所需时间。上传完成以后显示压缩的时间、上传的时间和总共所需的时间。 根据文件流上传,根据文件流进度做的进度条,是真的实实在在的进度条。 代码都有详细的注释,例如: private string ftpUser = "Administrator"; //ftp用户名 private string ftpPassword = "123456"; //ftp密码 public TimeSpan t; //加载进度条总时间 private DateTime startTotalTimeFtp = System.DateTime.Now; private DateTime endTotalTimeFtp = System.DateTime.Now; //压缩用时(为传值做准备) //public TimeSpan zipTime; //定义开始时间、结束时间和之间的时间段,以此来估计完成所需剩余时间 DateTime startTime = System.DateTime.Now; DateTime endTime = System.DateTime.Now; TimeSpan TimeSp; //定义剩余时间 string surPlusTime = string.Empty; //判断是否小于1秒所用 int Ti = 0; //实例化类TimeSpanClass TimeSpanClass timeSpanClass = new TimeSpanClass(); 进度条可以实时动态更新,显示剩余时间,剩余时间也跟随进度条实时动态更新,上传完成显示上传时间。 再次声明,版权所有(花费本人好几个月的心血研究真实的进度条),保证进度条为真正按照文件流的进度所进行,如有问题,可与本人联系!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值