从数据库读取pdf文件,然后在页面上做链接,点击链接后,有的用户说可以直接打开pdf文件,
有的则是出现执行读取的文件下载提示:您想保存此文件吗?名称:showfile.aspx
类型:未知文件类型,244kb
发送者:XXXXXXXX用户都是装了acrobat reader的,下面是showfile.aspx处理代码:if (Request.QueryString["sno"] != null)
        {
            Q12_FILES files = new Q12_FILES();
            files.SERIALNO = Request.QueryString["sno"].ToString();            Encrypt objen = new Encrypt();  //加密            SqlDataReader sdr = files.Select();
            if (sdr.Read())
            {
                Response.Clear();
                Response.AddHeader("Content-Type", "application/pdf");
                byte[] b = objen.DecryptByte((byte[])sdr["pdffiles"]);
                Response.AddHeader("Content-Length", b.Length.ToString());
                Response.BinaryWrite(b);
                sdr.Close();
            }
            else
            {
                sdr.Close();
                Utility.MsgBox(this.Page,"无此报告,请确认是否上传!",true);
            }            
            objen = null;           
        }希望全部都可以直接打开,请帮忙解决,谢谢!

解决方案 »

  1.   

    应该是 弹出一个对话框,问你 是打开 ,还是 保存。你要直接打开,就打开,你要保存就 保存。这样才符合用户的习惯。FileInfo fileInfo = new FileInfo(Server.MapPath(path));
        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();
        Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(name));
        Response.AddHeader("Content-Length", fileInfo.Length.ToString());
        Response.AddHeader("Content-Transfer-Encoding", "binary");
        Response.ContentType = "application/octet-stream";
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
        Response.WriteFile(fileInfo.FullName);
        Response.Flush();
        Response.End();
      

  2.   

    Response.ClearHeaders();  这一句很重要,一定要加上,否则就会出现我说的情况。
    还有Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 
    长度一定要加上,否则装了低版本的acrobat的用户无法打开pdf文件。