Nine MVP's Blog

11/05/2010

ASP.NET เมื่อใช้ Response.BinaryWrite() แล้วชื่อภาษาไทยกลายเป็นยึกยือ ปัญหาของIE

Filed under: Uncategorized — Nine MVP @ 7:49 am

เป็นเรื่องของการเขียน asp.net ให้ download file โดยการอ่าน File เข้ามาเป็น byte[] 

แล้วค่อยใช้ Response.BinaryWrite(byte[])  ออกไป

มันเป็นปัญหาเฉพาะ IE เท่านั้น  

หากเจอ อักขระ ที่ต้องห้าม  file name ภาษาไทยจะเอ๋อกินทันที 

ซึ่งนั่งปวดหมองอยู่วันนึงแล้วก็พบทางสว่าง  

เลยต้องแก้ไขตามนี้

        public string FileNameEncoder(string filename)

        {

            if (Request.Browser.Browser.Contains("IE"))

            {

                filename = Uri.EscapeDataString(Path.GetFileNameWithoutExtension(filename)).Replace("%20", " ") + Path.GetExtension(filename);

            }

            return filename;

        }

ในตอนเรียกใช้ก็เขียนประมาณนี้

        private void WriteFile(string pdfFileName,string type)

        {

            try

            {

                var bytefile = File.ReadAllBytes(pdfFileName);

                pdfFileName = FileNameEncoder(pdfFileName); 

                Response.Clear();

                Response.ClearContent();

                Response.ClearHeaders();

                Response.Charset = System.Text.Encoding.UTF8.WebName;

                Response.HeaderEncoding = System.Text.Encoding.UTF8;

                Response.ContentEncoding = System.Text.Encoding.UTF8;

                Response.ContentType = "Application/" + type;

                Response.AppendHeader("content-disposition", "attachment; filename=" + Path.GetFileName( pdfFileName));

                Response.BinaryWrite(bytefile);

                Response.End();

            }

            catch (Exception ex)

            {

                Response.Write(ex);

            }

        } 

Happy ครับ

ปล.  แต่ปัญหาจะไม่เกิด ถ้าใช้ Chrome, Firefox, IE9

3 Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URI

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.

%d bloggers like this: