zoukankan      html  css  js  c++  java
  • 通过 <a>标签实现ftp文件下载功能

    环境:

    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;
            }
        }
    

      

  • 相关阅读:
    什么叫大数据,与云计算有何关系
    未来机器时代 马云担心的居然是男性找不到工作
    浏览器原生登陆验证实现
    eclipse-java-style.xml
    tomcat和应用集成
    简单springboot及springboot cloud环境搭建
    maven module
    maven scope
    java ReentrantLock Condition
    抓取动态网页
  • 原文地址:https://www.cnblogs.com/Vinkong/p/10059385.html
Copyright © 2011-2022 走看看