我现在在做一个文档下载的页面,先将某些文档上传到数据库中,存放在表中的document字段类型是Image!其中有doc,pdf文件。当点击一链接下载时,用语句Response.BinaryWrite((byte[])sdr["document"]);来实现的,奇怪的现象出现了,当是DOC文件时,正常—显示下载或是直接打开窗口;但当是PDF文件时呢,结果是不仅没有下载或打开窗口,而且在新页面居然显示System.Byte[]这段字。非常纳闷,不知道问题出在哪里。
PS:而且我在另外一Project中(实现方式完全一样),PDF文件居然可以直接打开,只是没有提示是否保存或直接打开窗口。

解决方案 »

  1.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    string PapID=Request.QueryString["id"].ToString();
    SqlConnection con=DBCon.createCon();
    string strSQL="select document,doctype from syspaper where papID=";
    strSQL+=PapID.ToString();
    con.Open();
    SqlCommand com=new SqlCommand(strSQL,con);
    SqlDataReader sdr=com.ExecuteReader();
    if(sdr.Read())
    {
    Response.ClearHeaders();  //清除缓冲区流中的所有头。
    switch((string)sdr["doctype"])
    {
    case "doc":
    Response.ContentType="application/msword";
    break;
    case "pdf":
    Response.ContentType="application/pdf";
    break;
    }
    byte[] buff;
    buff=(byte[])sdr["document"];
    Response.BinaryWrite( buff ); //将一个二进制字符串写入HTTP输出流
    }
    ************************************************************************************
    以上就是代码了,DOC文件就可以,PDF就不行,快疯了!
    这前面的"id"是前面一个页面传过来的
      

  2.   

    System.Byte[]是因为类型不对,所以没法正常输出,仔细检查代码
      

  3.   

    但是为什么DOC和其他类型就可以呢?