环境:
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;
}
}