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

http://www.cnblogs.com/LYunF/archive/2012/03/16/2399927.html

 

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

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

    以下是具体代码

 

复制代码
  1 using System;
  2 using System.Configuration;
  3 using System.Data;
  4 using System.Linq;
  5 using System.Web;
  6 using System.Web.Security;
  7 using System.Web.UI;
  8 using System.Web.UI.HtmlControls;
  9 using System.Web.UI.WebControls;
 10 using System.Web.UI.WebControls.WebParts;
 11 using System.Xml.Linq;
 12 using System.IO;
 13 using System.Net;
 14 using System.Text;
 15 
 16 public partial class _Default : System.Web.UI.Page 
 17 {
 18     //以下字段配置在web.config
 19     private string ftpServerIP = "127.0.0.1";//服务器ip
 20     private string ftpUserID = "FTPTEST";//用户名FTPTEST
 21     private string ftpPassword = "ftptest";//密码
 22     protected void Page_Load(object sender, EventArgs e)
 23     {
 24 
 25         if (MyFile.Value != "")
 26         {
 27             //string a = MyFile.;
 28         }
 29         
 30     }
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39     //ftp的上传功能
 40     private void Upload(string filename)
 41     {
 42         FileInfo fileInf = new FileInfo(filename);
 43 
 44         string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;
 45         FtpWebRequest reqFTP;
 46 
 47         // 根据uri创建FtpWebRequest对象 
 48         reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));
 49 
 50         // ftp用户名和密码
 51         reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 52 
 53         // 默认为true,连接不会被关闭
 54 // 在一个命令之后被执行
 55         reqFTP.KeepAlive = false;
 56 
 57         // 指定执行什么命令
 58         reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
 59 
 60         // 指定数据传输类型
 61         reqFTP.UseBinary = true;
 62 
 63         // 上传文件时通知服务器文件的大小
 64         reqFTP.ContentLength = fileInf.Length;
 65 
 66         // 缓冲大小设置为2kb
 67         int buffLength = 2048;
 68 
 69         byte[] buff = new byte[buffLength];
 70         int contentLen;
 71 
 72         // 打开一个文件流 (System.IO.FileStream) 去读上传的文件
 73         FileStream fs = fileInf.OpenRead();
 74         try
 75         {
 76             // 把上传的文件写入流
 77             Stream strm = reqFTP.GetRequestStream();
 78 
 79             // 每次读文件流的2kb
 80             contentLen = fs.Read(buff, 0, buffLength);
 81 
 82             // 流内容没有结束
 83             while (contentLen != 0)
 84             {
 85                 // 把内容从file stream 写入 upload stream
 86                 strm.Write(buff, 0, contentLen);
 87 
 88                 contentLen = fs.Read(buff, 0, buffLength);
 89             }
 90 
 91             // 关闭两个流
 92             strm.Close();
 93             fs.Close();
 94             this.Page.RegisterStartupScript("", "<script>alert('成功')</script>");
 95         }
 96         catch (Exception ex)
 97         {
 98             // MessageBox.Show(ex.Message, "Upload Error");
 99             Response.Write("Upload Error:" + ex.Message);
100         }
101     }
102 
103 
104     //从ftp服务器上下载文件的功能
105     private void Download(string filePath, string fileName)
106     {
107         FtpWebRequest reqFTP;
108 
109         try
110         {
111             FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
112 
113             reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName));
114 
115             reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
116 
117             reqFTP.UseBinary = true;
118 
119             reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
120 
121             FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
122 
123             Stream ftpStream = response.GetResponseStream();
124 
125             long cl = response.ContentLength;
126 
127             int bufferSize = 2048;
128 
129             int readCount;
130 
131             byte[] buffer = new byte[bufferSize];
132 
133             readCount = ftpStream.Read(buffer, 0, bufferSize);
134 
135             while (readCount > 0)
136             {
137                 outputStream.Write(buffer, 0, readCount);
138 
139                 readCount = ftpStream.Read(buffer, 0, bufferSize);
140             }
141 
142             ftpStream.Close();
143 
144             outputStream.Close();
145 
146             response.Close();
147         }
148         catch (Exception ex)
149         {
150             Response.Write("Download Error:" + ex.Message);
151         }
152     }
153 
154     //从ftp服务器上获得文件列表
155     public string[] GetFileList()
156     {
157         string[] downloadFiles;
158         StringBuilder result = new StringBuilder();
159         FtpWebRequest reqFTP;
160         // HttpWebRequest reqFTP;
161         try
162         {
163             reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/"));
164             reqFTP.UseBinary = true;
165             reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
166             reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
167             WebResponse response = reqFTP.GetResponse();
168             StreamReader reader = new StreamReader(response.GetResponseStream());
169             string line = reader.ReadLine();
170             while (line != null)
171             {
172                 result.Append(line);
173                 result.Append("\n");
174                 line = reader.ReadLine();
175             }
176             // to remove the trailing '\n'        
177             result.Remove(result.ToString().LastIndexOf('\n'), 1);
178             reader.Close();
179             response.Close();
180             return result.ToString().Split('\n');
181         }
182         catch (Exception ex)
183         {
184             downloadFiles = null;
185             return downloadFiles;
186         }
187     }
188 
189     protected void Button1_Click(object sender, EventArgs e)
190     {
191         Upload("F:\\美国队长DVD中字.rmvb");
192     }
193     protected void Button2_Click(object sender, EventArgs e)
194     {
195 
196     }
197 }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值