| [点晴永久免费OA][ASP.NET]web实现用FTP上传、下载文件(附源码)
					当前位置:点晴教程→点晴OA办公管理信息系统
					
					→『 经验分享&问题答疑 』
					
				 
 文章配套源码下载地址: 
 index.aspx 页: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="index.aspx.cs" Inherits="index" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>ASP.NET的FTP上传和下载</title> <script src="http://code.jquery.com/jquery-latest.js"></script> </head> <body> <form id="form1" runat="server"> <div> <asp:FileUpload runat="server" ID="FileUpload"></asp:FileUpload> <asp:Button ID="Button1" runat="server" Text="FTP上传" OnClick="Button1_Click" /> <asp:Button ID="Button2" runat="server" Text="刷新列表" OnClick="Button2_Click" /> <br /> <br /> <table border="1" width="1000"> <tr> <th>编号</th> <th>文件夹</th> <th>文件名</th> <th>日期</th> <th>http协议下载</th> <th>ftp协议下载</th> </tr> <asp:Repeater runat="server" ID="Repeater1"> <ItemTemplate> <tr> <td><%#Eval("fileNo") %></td> <td><%#Eval("ftpURI") %></td> <td><%#Eval("fileName") %></td> <td><%#Eval("datetime") %></td> <td><a target="_blank" href='http://djk8888csdn.3vcm.net/<%#Eval("ftpURI") %>/<%#Eval("fileName") %>'>http://djk8888csdn.3vcm.net/<%#Eval("ftpURI") %>/<%#Eval("fileName") %></a></td> <td><input type="button" value="下载" οnclick=ftpDownload('<%#Eval("ftpURI") %>','<%#Eval("fileName") %>') /></td> </tr> </ItemTemplate> </asp:Repeater> </table> </div> </form> </body> </html> <script type="text/javascript"> function ftpDownload(uri, name) { $.get("ftpDownload.ashx", { ftpURI: uri, fileName: name }, function (e) { if (e == "ok") { alert("下载成功!文件在:\r\n C:\\" + name); } else { alert("下载失败:\r\n" + e); } }); } </script> 
 index.aspx.cs 页: using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Web; using System.Web.UI.WebControls; /// <summary> /// 这是一个完整的例子 /// </summary> public partial class index : System.Web.UI.Page {     static string strfile = "info.txt";//txt文件名     string txtPath = HttpContext.Current.Server.MapPath(strfile);//相对路径转绝对路径     string strout = string.Empty;//txt文件里读出来的内容           protected void Page_Load(object sender, EventArgs e)     {         if (!IsPostBack)         {             Bind();         }     }     //刷新列表     protected void Button2_Click(object sender, EventArgs e)     {         Bind();     }     private void Bind()     {         //string txt = File.ReadAllText(txtPath, Encoding.Default);//如果txt内容较少可用此法                          if (File.Exists(txtPath))         {             using (StreamReader sr = new StreamReader(System.Web.HttpContext.Current.Server.MapPath(strfile), System.Text.Encoding.Default))             {                 strout = sr.ReadToEnd();                 string temp = strout.Replace("\r\n", "");                 string[] strArr = temp.Split(';');//分解每一组数据                                             if (strArr != null && strArr.Any())                 {                     int fileNo = 1;                     List<Info> list = new List<Info>();                     foreach (var item in strArr)                     {                         if (!string.IsNullOrEmpty(item) && !string.IsNullOrWhiteSpace(item))                         {                             string[] strArr2 = item.Split('│');//分解每一个属性                             Info info = new Info();                             info.fileNo = fileNo; fileNo++;                             info.ftpURI = strArr2[0].ToString();                             info.fileName = strArr2[1].ToString();                             info.datetime = DateTime.Parse(strArr2[2].ToString());                             list.Add(info);                         }                     }                     if (list != null && list.Any())                     {                         this.Repeater1.DataSource = list.OrderByDescending(a => a.datetime);                         this.Repeater1.DataBind();                     }                 }             }         }     }     protected void Button1_Click(object sender, EventArgs e)     {         string errorMsg = "";         if (FileUpload.HasFile)         {             int fileLength = FileUpload.PostedFile.ContentLength;//文件大小,单位byte             string fileName = Path.GetFileName(FileUpload.PostedFile.FileName);//文件名称             string extension = Path.GetExtension(FileUpload.PostedFile.FileName).ToLower();//文件扩展名             //限制上传文件最大不能超过500M               if (!(fileLength < 512 * 1024 * 1024))             {                 Response.Write("<script>alert('文件最大不能超过500M!');</script>");                 return;             }             //限制文件格式             if (!".doc.docx.xls.xlsx.pdf.txt.jpg.jpeg".Contains(extension))             {                 Response.Write("<script>alert('不支持的文件格式!');</script>");                 return;             }             //创建文件夹             string ftpURI = DateTime.Now.ToString("yyyyMMdd");//以日期作为文件夹名称             try             {                 FtpWeb.CreateDirectory(ftpURI);//创建文件夹             }             catch { }             //准备上传文件             Stream fileStream = null;             try             {                 fileStream = FileUpload.PostedFile.InputStream;//读取本地文件流                 var b = FtpWeb.Upload(ftpURI, fileName, fileLength, fileStream, out errorMsg);//开始上传                 if (b)                 {                     if (File.Exists(txtPath))                     {                         FileStream myStream = new FileStream(txtPath, FileMode.Append, FileAccess.Write);// FileMode.Append,追加一行数据                         StreamWriter sw = new StreamWriter(myStream);                         sw.WriteLine(ftpURI + "│" + fileName + "│" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ";");//写入文件                         sw.Close();                     }                     Bind();                     Response.Write("<script>alert('上传成功!');</script>");                 }                 else                 {                     Response.Write("<script>alert('上传失败!" + errorMsg + "');</script>");                 }             }             catch (Exception ex)             {                 Response.Write("<script>alert('上传失败!" + ex.ToString() + "');</script>");             }             finally             {                 if (fileStream != null) fileStream.Close();             }         }         else         {             Response.Write("<script>alert('请选择一个文件再上传!');</script>");         }     }     public class Info     {         public int fileNo { get; set; }         public string ftpURI { get; set; }         public string fileName { get; set; }         public DateTime datetime { get; set; }     } } ftpDownload.ashx 页: <%@ WebHandler Language="C#" Class="ftpDownload" %> using System; using System.Web; public class ftpDownload : IHttpHandler { /// <summary> /// ftp协议下载文件 /// </summary> /// <param name="context"></param> public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string ftpURI = context.Request.QueryString["ftpURI"];//ftpURI string fileName = context.Request.QueryString["fileName"];//fileName string localPath = "C:\\";//文件下载路径(可自定义) string errorMsg = ""; bool b = FtpWeb.Download(ftpURI, localPath, fileName, out errorMsg); if (b) { context.Response.Write("ok"); } else { context.Response.Write(errorMsg); } } 
 public bool IsReusable { get { return false; } } } 
 FtpWeb.cs 页: using System; using System.IO; using System.Net; /// <summary> /// web地址:   http://djk8888csdn.3vcm.net/ /// FTP地址:	ftp://013.3vftp.com/ /// FTP账号:	djk8888csdn /// FTP密码:	123456   /// </summary> public class FtpWeb {     public static string ftpHost = "ftp://013.3vftp.com/";//FTP的ip地址或域名      public static string ftpUserID = "djk8888csdn";//ftp账号     public static string ftpPassword = "123456";//ftp密码     /// <summary>     /// 上传     /// </summary>     /// <param name="ftpURI">ftp上的路径</param>     /// <param name="filename">ftp上的文件名</param>     /// <param name="fileLength">文件大小</param>     /// <param name="localStream">本地文件流</param>     /// <param name="errorMsg">报错信息</param>     /// <returns></returns>     public static bool Upload(string ftpURI, string filename, int fileLength, Stream localStream, out string errorMsg)     {         errorMsg = "";         Stream fileStream = null;//本地文件流         Stream requestStream = null;//ftp文件流               try         {             fileStream = localStream;//本地文件流             Uri uri = new Uri(ftpHost + ftpURI + "/" + filename);//ftp完整路径             FtpWebRequest uploadRequest = (FtpWebRequest)WebRequest.Create(uri);//创建FtpWebRequest实例uploadRequest               uploadRequest.Method = WebRequestMethods.Ftp.UploadFile;//将FtpWebRequest属性设置为上传文件               uploadRequest.Credentials = new NetworkCredential(ftpUserID, ftpPassword);//认证FTP用户名密码               requestStream = uploadRequest.GetRequestStream();//ftp上的空文件             int buffLength = 2048; //开辟2KB缓存区               byte[] buff = new byte[buffLength];             int contentLen;             contentLen = fileStream.Read(buff, 0, buffLength);             while (contentLen != 0)             {                 requestStream.Write(buff, 0, contentLen);//将本地文件流写入到ftp上的空文件中去                 contentLen = fileStream.Read(buff, 0, buffLength);             }             requestStream.Close();             fileStream.Close();             return true;         }         catch (Exception ex)         {             errorMsg = ex.Message;             return false;         }         finally         {             if (fileStream != null) fileStream.Close();             if (requestStream != null) requestStream.Close();         }     }     //创建文件夹     public static string CreateDirectory(string ftpDir)     {         FtpWebRequest request = SetFtpConfig(WebRequestMethods.Ftp.MakeDirectory, ftpDir);         FtpWebResponse response = (FtpWebResponse)request.GetResponse();         return response.StatusDescription;     }     private static FtpWebRequest SetFtpConfig(string method, string ftpDir)     {         return SetFtpConfig(method, ftpDir, "");     }     private static FtpWebRequest SetFtpConfig(string method, string ftpDir, string fileName)     {         ftpDir = string.IsNullOrEmpty(ftpDir) ? "" : ftpDir.Trim();         return SetFtpConfig(ftpHost, ftpUserID, ftpPassword, method, ftpDir, fileName);     }     private static FtpWebRequest SetFtpConfig(string host, string username, string password, string method, string RemoteDir, string RemoteFileName)     {         System.Net.ServicePointManager.DefaultConnectionLimit = 50;         FtpWebRequest request = (FtpWebRequest)WebRequest.Create(host + RemoteDir + "/" + RemoteFileName);         request.Method = method;         request.Credentials = new NetworkCredential(username, password);         request.UsePassive = false;         request.UseBinary = true;         request.KeepAlive = false;         return request;     }     /// <summary>     /// FTP文件下载(代码仅供参考)     /// </summary>     /// <param name="ftpURI">fpt文件路径</param>     /// <param name="localPath">本地文件路径</param>     /// <param name="fileName">ftp文件名</param>     /// <param name="errorMsg">报错信息</param>     /// <returns></returns>     public static bool Download(string ftpURI, string localPath, string fileName, out string errorMsg)     {         errorMsg = "";         FtpWebRequest reqFTP = null;         FileStream outputStream = null;         Stream ftpStream = null;         FtpWebResponse response = null;         try         {             outputStream = new FileStream(localPath + "/" + fileName, FileMode.Create);//创建本地空文件             Uri uri = new Uri(ftpHost + ftpURI + "/" + fileName);//ftp完整路径             reqFTP = (FtpWebRequest)FtpWebRequest.Create(uri);             reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;             reqFTP.UseBinary = true;             reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);//登录ftp             response = (FtpWebResponse)reqFTP.GetResponse();             ftpStream = response.GetResponseStream();//读取ftp上文件流             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);//将ftp文件流写入到本地空文件中去                 readCount = ftpStream.Read(buffer, 0, bufferSize);             }             return true;         }         catch (Exception ex)         {             errorMsg = ex.Message;             return false;         }         finally         {             if (ftpStream != null) ftpStream.Close();             if (outputStream != null) outputStream.Close();             if (response != null) response.Close();         }     } } 文章配套源码下载地址: 该文章在 2020/5/22 10:02:43 编辑过 | 关键字查询 相关文章 正在查询... |