博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

asp.net 下载文件乱码问题

Posted on 2009-06-18 16:42  菠萝  阅读(1281)  评论(0编辑  收藏  举报
   string strTemp = System.Web.HttpUtility.UrlEncode(strName, System.Text.Encoding.UTF8);//解决文件名乱码

        protected string strConn = Common.Config.GetAppSettingsKeyValue("DBConnectString");
        protected System.Data.OleDb.OleDbConnection  conn;
        protected System.Data.OleDb.OleDbCommand     cmd;
        protected System.Data.OleDb.OleDbDataReader  dr;

        private void Download(string field, string id)
        {
            try
            {
                string strCmd  = "select * from doc_body where id = " + id;
                conn = new OleDbConnection(strConn);
                cmd  = new OleDbCommand(strCmd,conn);
                conn.Open();
                dr = cmd.ExecuteReader();
                dr.Read();
                int nSize = (int)dr["doc_size"];
                string strContentType = (string)dr["ContentType"];
                string strName = (string)dr["doc_name"];
                byte [] data = (byte[])dr[field];
                if(nSize == 0)
                {
                    message.Text = "<font color=#0000ff>没有文件下载!</font>";
                }
                else
                {
                    Response.Clear();
                    Response.Buffer = true;
                    //Response.Charset = "utf-8";
                    //Response.ContentEncoding=System.Text.Encoding.GetEncoding("utf-8");
                    //utf-8,gb2312,big5
                    Response.ContentType = strContentType;
                    //application/ms-excel,application/ms-word,application/ms-txt,application/ms-html或其他浏览器可直接支持文档
                    string strTemp = System.Web.HttpUtility.UrlEncode(strName, System.Text.Encoding.UTF8);//解决文件名乱码
                    Response.AppendHeader("content-disposition", "attachment;filename=" + strTemp);//附件下载
                    //Response.AppendHeader("content-disposition", "online;filename=" + strName);//在线打开
                    Response.OutputStream.Write(data, 0, nSize);    
                }
            }
            catch(Exception exp)
            {
                Common.utility.MessageBox(this,"下载失败!\n错误信息:\n"+exp.Message);
            }
            finally
            {
                conn.Close();
            }
        }