解决IE、360、谷歌浏览器等无法访问FTP中文文件路径

最近开发一个项目,用户的文件是存放在FTP服务器上的。并且需要在浏览器中,浏览这些文件。FTP文件路径如下:

但是却出现了如下问题:ftp://192.168.1.121/成果/分区/建设控制/市域控规划分.jpg

1.FTP中文文件路径在Firfox中可以正常显示

2.但是在IE、360、谷歌浏览其中却提示,无法访问路径


经过查询资料,知道IE等浏览器对中文字符采用的是GBK的字符集编码,但是Firfox却是采用的UTF-8的字符集编码。

所以得出如下结论:

1.在客户端判断浏览器产品是否属于Firfox

2.如果当前客户端不是Firfox,那么就对路径进行GBK编码

3.但是JS脚本无法实现GBK编码,故此必须在服务器端进行GBK编码

4.在服务器端建立一个CharsetHandler.ashx文件

5.文件内容如下:

string paraUrl = context.Request.QueryString["url"];
            if (string.IsNullOrEmpty(paraUrl))
                return;
            paraUrl = paraUrl.ToLower();


            //判断网络协议
            string patternNetXY = @"^(http|https|ftp):[/\\]{2}";
            Match match = Regex.Match(paraUrl, patternNetXY);
            //网络协议名称
            string netXYName = "";
            if (match != null)
            {
                netXYName = match.Value;
                paraUrl = paraUrl.Replace(netXYName, "");
            }     


            //判断IP地址
            string patternIP = @"^(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))\.){3}((25[0-5]?)|(1\d{0,2}))";           
            match = Regex.Match(paraUrl, patternIP);
            //ip地址
            string ip = "";
            if (match != null)
            {
                ip = match.Value;
                //去掉ip地址之后的路径
                paraUrl = paraUrl.Replace(ip+"/", "");
            }              


            string encode = HttpUtility.UrlEncode(paraUrl, System.Text.Encoding.GetEncoding("GB2312"));


            string returnUrl = "";
            if (!string.IsNullOrEmpty(netXYName) && !string.IsNullOrEmpty(ip))
                returnUrl = netXYName + ip+"/" + encode.ToUpper();
            else
                returnUrl = encode.ToUpper();


            context.Response.ContentType = "text/plain";
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append("{");
            sb.Append("\"data\":\"" + returnUrl + "\"");
            sb.Append("}");
            //输出数据
            context.Response.Write(sb.ToString());
            context.Response.End();

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值