解决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();

时间: 2024-08-27 00:43:57

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

windows10访问ftp中文乱码怎么办?

windows10访问ftp中文乱码怎么办? 打开控制面板 选择时间和区域 选择更改数字格式 点击管理并点击更改系统区域设置 打勾 原文地址:https://www.cnblogs.com/sogeisetsu/p/11380540.html

解决office出现 ‘很抱歉,powerpoint 无法读取......文件路径’错误的方法

      昨天帮一个同事解决一个PPT打不开报错的异常,找了很长时间发现网上没有很好的解决的方案,昨天弄了两个小时,现在和大家分享一下经验吧,帮助大家以后遇到类似的问题可以瞬间秒杀. 首先,回归来自百度经验的这边文章, *******************************************************************************************************************************************

Linux Centos 通过虚拟用户访问FTP的配置

Linux Centos 通过虚拟用户访问FTP的配置 实验需求: 让下面4个虚拟用户使用系统用户ftpvu的权限来连接到Linux FTP服务器,并确保都锁定在 自己的虚拟用户目录,不能切换到其他目录. ftp1-3的带宽速率限制在500KB,davidge用户不限制带宽. 系统环境: [root@cent7-184 ~]# uname -r 3.10.0-229.el7.x86_64 [root@cent7-184 ~]# cat /etc/redhat-release CentOS Lin

Linux客户机访问FTP服务器常见的问题及解决办法

在Linux系统中,搭建一个服务,就是修改其配置文件,一般情况下,配置文件的修改出现问题的概率不大,多半是一些其他因素导致客户机与服务器之间访问出现问题,下面就针对客户机访问FTP服务器常出现的一些问题找出解决办法.其他服务的解决办法也类似.1.客户机无法访问FTP服务器如果说客户机无法访问FTP服务器多半是防火墙的作怪,iptables 防火墙管理工具默认禁止了 FTP 传输协议的端口号,因此在正式配置 vsftpd 服务程序之前,为了避免这些默认的防火墙策略"捣乱",还需要清空 i

linux上搭建ftp、vsftp, 解决访问ftp超时连接, 解决用户指定访问其根目录,解决ftp主动连接、被动连接的问题

linux上搭建ftp 重要 解决如何搭建ftp         解决用户指定访问其根目录         解决访问ftp超时连接         解决ftp主动连接.被动连接的问题 1.安装ftp    安装ftp前,先把防火墙关闭 #service iptables stop   (挺重要) 安装好后再根据需要的端口 添加到 iptables 直接用yum安装 vsftp # 1.执行以下安装命令 yum install -y vsftpd # 2.设置开机启动服务 chkconfig vs

解决RouteOS多线路叠加无法访问FTP问题

在公司WEB服务器搭建了PureFTP,搭好后在公司死活连接不上,报错信息如下: 以 PASV 模式连接失败,正在尝试 PORT 模式. 正在侦听端口: 49856,正在等待连接. PORT 192,168,2,37,194,192 200 PORT command successful MLSD 425 Could not open data connection to port 11232: Connection refused 列表 错误 QUIT 换公司另外一条专线或是用手机热点就可以正

ie8访问ftp

虽然微软的IE浏览器8.0版本在安全方面进行了增强,但是在访问FTP的功能和方便性上被大幅度的减弱,微软在IE7中已经取消了以前版本对 FTP访问的许多功能.这导致以前使用浏览器访问FTP的用户在使用IE7访问FTP时常遇到一些问题,因此下面提供了二个解决办法: 一.替代方法 第一步:启动 InternetExplorer 8 在菜单栏选择工具-〉Internet 选项 -〉高级 -〉钩选"启用 FTP 文件夹视图 (在InternetExplorer之外)"复选框, 然后单击 确定

CS4:用户在使用IE访问FTP server 时遇到 502代理错误,没有弹出输入用户凭据对话框

客户问题概括:用户在使用IE 访问FTP server 时遇到 502代理错误.用户在浏览器使用 ftp://ftpServerName 访问自检FTP server 时没有提示输入用户凭据报错 502. HTTP 502 Proxy Error - The login request was denied 解决方法: 通过对客户环境进行了解得知 客户使用TMG作为web代理进行FTP访问,告知客户此报错是产品设计报错. 如划线部分:当客户端Web代理访问外部FTP站点时应使用 ftp://us

关于Centos7 firewalld防火墙开放端口后仍不能访问ftp和nginx的问题解决

我在阿里轻量应用服务器搭建ftp服务器这篇博客中把防火墙换为iptables,因为当时无论我怎么设置firewalld,就是无法访问ftp服务器,今天在翻看其他博客的时候,突然发现firewalld有打开服务这么一个命令,然后我就找到了解决的办法.查看当前开了哪些端口其实一个服务对应一个端口,每个服务对应/usr/lib/firewalld/services下面一个xml文件. firewall-cmd --list-services1通过这个命令我们查看当前打开了那些服务,比如下面这个 我开启