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

      

  • 相关阅读:
    windows开启PostgreSQL数据库远程访问
    Git使用介绍
    linux 常用工具记录及简介
    ubuntu18 安装坑点记录(华硕飞行堡垒)
    快手自动视频随机点赞脚本
    接触手机脚本编程------基于触动精灵的lua编程
    使电脑蜂鸣器发声小脚本
    tensorflow--非线性回归
    python笔记--------numpy
    python笔记--------二
  • 原文地址:https://www.cnblogs.com/Vinkong/p/10059385.html
Copyright © 2011-2022 走看看