asp.net实现ftp上传代码(解决大文件上传问题)
2013-01-18 17:18
751 查看
/article/5325235.html
以下是具体代码
View Code?
asp.net实现ftp上传代码(解决大文件上传问题)
原来使用asp.net上传控件上传 那个虽然简单但是页面不是很友好 然后就用了uploadify上传控件 这个控件虽然界面友好 但是大文件还是不能上传 而且在不同的浏览器会出现session丢失问题 所以我到了个ftp上传的方法以下是具体代码
View Code?
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 }
相关文章推荐
- 20160113006 asp.net实现ftp上传代码(解决大文件上传问题)
- asp.net实现ftp上传代码(解决大文件上传问题)
- asp.net实现ftp上传代码(解决大文件上传问题)
- asp.net实现ftp上传代码(解决大文件上传问题)
- asp.net实现ftp上传代码(解决大文件上传问题)
- asp.net web实现ftp上传代码 (解决大文件上传问题)
- asp.net实现ftp上传代码(解决大文件上传问题)
- asp.net实现上传文件显示本地绝对路径的实例代码
- asp.net实现上传文件显示本地绝对路径的实例代码
- ASP.NET中实现多文件上传的实例程序代码
- [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传
- Asp.Net模拟表单提交数据和上传文件的实现代码
- ASP.NET设计网络硬盘之上传文件实现代码
- Asp.net 2.0 用 FileUpload 控件实现多文件上传 用户控件(示例代码下载)
- 给网站增加解压缩功能,解决上传速度慢或者不支持FTP的问题(要求支持asp.net和SharpZip)
- 解决Asp.net 上传文件过大限制问题
- 如何解决ASP.NET下载时的中文文件名乱码,与TXT文件中存在代码两个问题
- 解决asp.net 以及MVC中上传文件大小限制的问题
- Asp.net 2.0 用 FileUpload 控件实现多文件上传 用户控件(示例代码下载)
- Asp.Net模拟表单提交数据和上传文件的实现代码