asp.net实现ftp上传代码(解决大文件上传问题)
2013-02-21 12:03
911 查看
原来使用asp.net上传控件上传 那个虽然简单但是页面不是很友好 然后就用了uploadify上传控件 这个控件虽然界面友好 但是大文件还是不能上传 而且在不同的浏览器会出现session丢失问题 所以我到了个ftp上传的方法
以下是具体代码
View Code?
转自:/article/5325235.html
以下是具体代码
View Code?
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) { } }
转自:/article/5325235.html
相关文章推荐
- 20160113006 asp.net实现ftp上传代码(解决大文件上传问题)
- asp.net实现ftp上传代码(解决大文件上传问题)
- asp.net实现ftp上传代码(解决大文件上传问题)
- asp.net实现ftp上传代码(解决大文件上传问题)
- asp.net web实现ftp上传代码 (解决大文件上传问题)
- asp.net实现ftp上传代码(解决大文件上传问题)
- asp.net实现ftp上传代码(解决大文件上传问题)
- ASP.NET设计网络硬盘之上传文件实现代码
- asp.net实现上传文件显示本地绝对路径的实例代码
- [代码示例]用Fine Uploader+ASP.NET MVC实现ajax文件上传
- Asp.Net模拟表单提交数据和上传文件的实现代码
- 解决ASP.NET Core Mvc文件上传限制问题
- ASP.NET中实现多文件上传简单代码
- 解决asp.net不能上传大文件的问题
- 如何解决ASP.NET下载时的中文文件名乱码,与TXT文件中存在代码两个问题
- 解决asp.net 以及MVC中上传文件大小限制的问题
- Asp.Net模拟表单提交数据和上传文件的实现代码
- asp.net实现上传文件显示本地绝对路径的实例代码
- 解决asp.net中使用FckEditor上传文件,中文名称乱码的问题
- Java实现ftp文件上传下载解决慢中文乱码多个文件下载等问题