解決IE、360、Google瀏覽器等無法訪問FTP中文檔案路徑,Googleftp
最近開發一個項目,使用者的檔案是存放在FTP伺服器上的。並且需要在瀏覽器中,瀏覽這些檔案。FTP檔案路徑如下:
但是卻出現了如下問題:ftp://192.168.1.121/成果/分區/建設控制/市域控規劃分.jpg
1.FTP中文檔案路徑在Firfox中可以正常顯示
2.但是在IE、360、Google瀏覽其中卻提示,無法訪問路徑
經過查詢資料,知道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();