ASHX文件下载损坏的文件

时间:2011-03-28 18:04:42

标签: c# asp.net download handler ashx

当我访问我的ashx时,例如download.ashx?id = 18,它获取文件,但是当弹出保存对话框时,它要求我保存download.ashx而不是我存储在数据库中的文件(让比如mypdf.pdf)如果你打开文件下载它会在Visual Studio中打开,并没有真正显示任何有用的东西。造成这种情况的原因是,我在很多浏览器和许多机器上都尝试过它,它们都是一样的吗?

由于

        string id = ctx.Request.QueryString["id"];
        string name = null;
        string mime = null;

        SqlConnection con = new SqlConnection(CONN);
        SqlCommand cmd = new SqlCommand("DownloadActivityFile", con);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@aid", id);

        byte[] afile = null;
        try
        {
            con.Open();
            SqlDataReader reader = cmd.ExecuteReader();

            while (reader.Read())
            {
                mime = reader["ActivityFileMIME"].ToString();
                ctx.Response.ContentType = mime;
                afile = (byte[])reader["ActivityFile"];
                name = reader["ActivityFileName"].ToString();
            }
            ctx.Response.Buffer = false;
            ctx.Response.ContentType = mime;
            ctx.Response.AddHeader("content-disposition", string.Format("attachment; {0}", name));
            ctx.Response.Clear();
            ctx.Response.BinaryWrite(afile);
            ctx.Response.End();
        }
        catch (Exception e)
        {
            ctx.Response.Write(e.ToString());
        }
        finally
        {
            con.Close();
        }

1 个答案:

答案 0 :(得分:4)

您需要设置Content-Disposition: attachment; filename=\"{0}\"标题 注意 filename= ,以及名称周围的引号。