asp.net 將檔案 二進位 上傳 儲存 再顯示,解決檔案流中文亂碼問題。

來源:互聯網
上載者:User

前些日子為瞭解決跨域檔案互動和上傳檔案。把檔案轉換成二進位進行傳輸,方便儲存。

 

首先在上傳檔案的時候有問題,那就是電腦的案頭檔案和某些盤的檔案有許可權的控制,禁止訪問。

後來查了查,有好多貼說要設定電腦,作為web程式也不能讓每一個電腦都設定呀,太麻煩了。

解決原來是iis的連接埠不能是100左右的連接埠。

 

解決問題在webconfig中就能設定。加入以下代碼就ok了。

<system.web><br /><identity impersonate="true" userName="使用者名稱" password="密碼"/><br /><authorization><br /> <allow users="?"/> <!--deny表示禁止,users="?"表示匿名使用者 allow表示允許<br />--><br /></authorization><br /></system.web>

 

下面是檔案儲存和下載的代碼。

string path = @"C:/Documents and Settings/Administrator/案頭/建立 文字文件.txt"; //檔案實體路徑<br /> int fcount = 0;<br /> string contenttype = "";<br /> string filename = "";</p><p> FileInfo fi = new FileInfo(path); //擷取檔案資訊<br /> fcount = (int)fi.Length;<br /> contenttype = fi.Extension;<br /> filename = fi.FullName.Substring(fi.FullName.LastIndexOf('//') + 1, fi.FullName.LastIndexOf('.') - fi.FullName.LastIndexOf('//') - 1);<br /> FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);//讀取檔案<br /> BinaryReader br = new BinaryReader(fs);<br /> byte[] photo = br.ReadBytes(fcount);<br /> br.Close();<br /> fs.Close();</p><p> Session["test"] = photo; //將檔案二進位儲存到Session中</p><p> byte[] by = (byte[])Session["test"]; //擷取session資訊<br /> filename = setting.ToHexString(filename);//為了防止中文的亂碼,對其進行轉碼。<br /> Response.AddHeader("Content-Disposition", "attachment; filename=" + filename + contenttype + "");//設定讀取的檔案頭<br /> Response.AddHeader("Content-Length", by.Length.ToString());<br /> Response.ContentType = "application/octet-stream"; //設定輸出類型 這裡可以儲存在資料庫中 動態實作類別型<br /> Response.OutputStream.Write(by, 0, by.Length); //輸出<br /> Response.Flush();<br /> Response.End();

 

 

setting.ToHexString(filename)方法是解決檔案流中文亂碼問題。下的方法是在網上找的非原創。

共用給大家,在此感謝作者。

 

/// <summary><br /> /// 為字串中的非英文字元編碼<br /> /// </summary><br /> /// <param name="s"></param><br /> /// <returns></returns><br /> public static string ToHexString(string s)<br /> {<br /> char[] chars = s.ToCharArray();<br /> StringBuilder builder = new StringBuilder();<br /> for (int index = 0; index < chars.Length; index++)<br /> {<br /> bool needToEncode = NeedToEncode(chars[index]);<br /> if (needToEncode)<br /> {<br /> string encodedString = ToHexString(chars[index]);<br /> builder.Append(encodedString);<br /> }<br /> else<br /> {<br /> builder.Append(chars[index]);<br /> }<br /> }</p><p> return builder.ToString();<br /> }</p><p> /// <summary><br /> ///指定 一個字元是否應該被編碼<br /> /// </summary><br /> /// <param name="chr"></param><br /> /// <returns></returns><br /> private static bool NeedToEncode(char chr)<br /> {<br /> string reservedChars = "$-_.+!*'(),@=&";</p><p> if (chr > 127)<br /> return true;<br /> if (char.IsLetterOrDigit(chr) || reservedChars.IndexOf(chr) >= 0)<br /> return false;</p><p> return true;<br /> }</p><p> /// <summary><br /> /// 為非英文字串編碼<br /> /// </summary><br /> /// <param name="chr"></param><br /> /// <returns></returns><br /> private static string ToHexString(char chr)<br /> {<br /> UTF8Encoding utf8 = new UTF8Encoding();<br /> byte[] encodedBytes = utf8.GetBytes(chr.ToString());<br /> StringBuilder builder = new StringBuilder();<br /> for (int index = 0; index < encodedBytes.Length; index++)<br /> {<br /> builder.AppendFormat("%{0}", Convert.ToString(encodedBytes[index], 16));<br /> }<br /> return builder.ToString();<br /> }

 

顯示沒有處理的中文亂碼問題。

 

處理後的顯示

 

 

呵呵,希望大家多多交流。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.