解決IE、360、Google瀏覽器等無法訪問FTP中文檔案路徑,Googleftp

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.