最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

360浏览器不能打开ftp服务器上的文件,解决IE、360、谷歌浏览器等无法访问FTP中文文件路径...

业界 admin 16浏览 0评论

最近开发一个项目,用户的文件是存放在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();

最近开发一个项目,用户的文件是存放在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)

  1. 暂无评论