环境:
ftp登录用户名
ftp登录密码
ftp文件路径
一般处理程序
下面是我通过网上查找的资料实现的一个例子
首先页面中的a 标签拼接路径带需要的参数
<a class="downST" href="../ashx/Folder.ashx?strPath=ftp://[ftp ip地址]/PLM/File/标准ztree数据.txt&FileName=标准ztree数据.txt">下载</a>
下面是处理程序代码
public void ProcessRequest (HttpContext context) { context.Response.ContentType = "text/plain"; string strUserName = "****"; //ftp登录用户名 string strPassword = "******."; //ftp登录密码
string FileName = context.Request["FileName"].ToString();
string address = context.Request["strPath"].ToString();
System.Net.WebClient request = new System.Net.WebClient(); request.Credentials = new System.Net.NetworkCredential(strUserName, strPassword);//认证FTP用户名密码 byte[] newFileData = request.DownloadData(address ); ////下载文件 //DownLoadFile(strFileName, newFileData, HttpContext context1); context.Response.ContentType = "application/octet-stream"; if (FileName == "") { FileName = "Temp"; } FileName = ToHexString(FileName); context.Response.AddHeader("Content-Disposition", "attachment;FileName=" + FileName); if (newFileData != null && newFileData.Length > 0) context.Response.OutputStream.Write(newFileData, 0, newFileData.Length); else context.Response.BinaryWrite(new byte[1]); context.Response.End(); } public static string ToHexString(string s) { char[] chars = s.ToCharArray(); StringBuilder builder = new StringBuilder(); for (int index = 0; index < chars.Length; index++) { bool needToEncode = NeedToEncode(chars[index]); if (needToEncode) { string encodedString = ToHexString(chars[index]); builder.Append(encodedString); } else { builder.Append(chars[index]); } } return builder.ToString(); } private static bool NeedToEncode(char chr) { string reservedChars = "$-_.+!*‘(),@=&"; if (chr > 127) return true; if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0) return false; return true; } private static string ToHexString(char chr) { UTF8Encoding utf8 = new UTF8Encoding(); byte[] encodedBytes = utf8.GetBytes(chr.ToString()); StringBuilder builder = new StringBuilder(); for (int index = 0; index < encodedBytes.Length; index++) { builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16)); } return builder.ToString(); } public bool IsReusable { get { return false; } }
原文地址:https://www.cnblogs.com/Vinkong/p/10059385.html
时间: 2024-10-20 08:07:14