asp.net web实现ftp上传代码 (解决大文件上传问题)

原来使用asp.net上传控件上传 那个虽然简单但是页面不是很友好 然后就用了uploadify上传控件  这个控件虽然界面友好 但是大文件还是不能上传 而且在不同的浏览器会出现session丢失问题 所以我到了个ftp上传的方法

using System;

 using System.Configuration;

 using System.Data;

 using System.Linq;

 using System.Web;

 using System.Web.Security;

 using System.Web.UI;

 using System.Web.UI.HtmlControls;

 using System.Web.UI.WebControls;

 using System.Web.UI.WebControls.WebParts;

 using System.Xml.Linq;

 using System.IO;

 using System.Net;

 using System.Text;

 

 public partial class _Default : System.Web.UI.Page 

 {

     //以下字段配置在web.config

     private string ftpServerIP = "127.0.0.1";//服务器ip

     private string ftpUserID = "FTPTEST";//用户名FTPTEST

     private string ftpPassword = "ftptest";//密码

     protected void Page_Load(object sender, EventArgs e)

     {

 

         if (MyFile.Value != "")

         {

             //string a = MyFile.;

         }

         

     }

 

 

 

 

 

 

 

 

     //ftp的上传功能

     private void Upload(string filename)

     {

         FileInfo fileInf = new FileInfo(filename);

 

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

         FtpWebRequest reqFTP;

 

         // 根据uri创建FtpWebRequest对象 

         reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));

 

         // ftp用户名和密码

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

 

         // 默认为true,连接不会被关闭

 // 在一个命令之后被执行

         reqFTP.KeepAlive = false;

 

         // 指定执行什么命令

         reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

 

         // 指定数据传输类型

         reqFTP.UseBinary = true;

 

         // 上传文件时通知服务器文件的大小

         reqFTP.ContentLength = fileInf.Length;

 

         // 缓冲大小设置为2kb

         int buffLength = 2048;

 

         byte[] buff = new byte[buffLength];

         int contentLen;

 

         // 打开一个文件流 (System.IO.FileStream) 去读上传的文件

         FileStream fs = fileInf.OpenRead();

         try

         {

             // 把上传的文件写入流

             Stream strm = reqFTP.GetRequestStream();

 

             // 每次读文件流的2kb

             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();

             this.Page.RegisterStartupScript("", "<script>alert('成功')</script>");

         }

         catch (Exception ex)

         {

             // MessageBox.Show(ex.Message, "Upload Error");

             Response.Write("Upload Error:" + ex.Message);

         }

     }

 

 

     //从ftp服务器上下载文件的功能

     private void Download(string filePath, string fileName)

     {

         FtpWebRequest reqFTP;

 

         try

         {

             FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);

 

             reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName));

 

             reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;

 

             reqFTP.UseBinary = true;

 

             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);

 

             while (readCount > 0)

             {

                 outputStream.Write(buffer, 0, readCount);

 

                 readCount = ftpStream.Read(buffer, 0, bufferSize);

             }

 

             ftpStream.Close();

 

             outputStream.Close();

 

             response.Close();

         }

         catch (Exception ex)

         {

             Response.Write("Download Error:" + ex.Message);

         }

     }

 

     //从ftp服务器上获得文件列表

     public string[] GetFileList()

     {

         string[] downloadFiles;

         StringBuilder result = new StringBuilder();

         FtpWebRequest reqFTP;

         // HttpWebRequest reqFTP;

         try

         {

             reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/"));

             reqFTP.UseBinary = true;

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

             reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;

             WebResponse response = reqFTP.GetResponse();

             StreamReader reader = new StreamReader(response.GetResponseStream());

             string line = reader.ReadLine();

             while (line != null)

             {

                 result.Append(line);

                 result.Append("\n");

                 line = reader.ReadLine();

             }

             // to remove the trailing '\n'        

             result.Remove(result.ToString().LastIndexOf('\n'), 1);

             reader.Close();

             response.Close();

             return result.ToString().Split('\n');

         }

         catch (Exception ex)

         {

             downloadFiles = null;

             return downloadFiles;

         }

     }

 

     protected void Button1_Click(object sender, EventArgs e)

     {

         Upload("F:\\美国队长DVD中字.rmvb");

     }

     protected void Button2_Click(object sender, EventArgs e)

     {

 

     }

 }

  

你可能感兴趣的:(asp.net)