2011-03-28 293 views
1

當我訪問我的ashx時,例如download.ashx?id = 18它獲取文件,但當保存對話框彈出時,它希望我保存download.ashx而不是我存儲的文件在數據庫中(讓我們說mypdf.pdf)如果你打開文件下載它在Visual Studio中打開,並沒有真正顯示任何有用的東西。是什麼原因導致這種情況,我在很多瀏覽器和許多機器上都試過了,它們都一樣嗎?ASHX文件下載損壞的文件

感謝

 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(); 
     } 

回答

4

您需要設置Content-Disposition: attachment; filename=\"{0}\"頭。
注意,以及名稱周圍的引號。

+0

引號是可選的,看來;甚至[rfc](http://www.ietf.org/rfc/rfc2183.txt)都有一些例子,例如:Content-Disposition:attachment;文件名= genome.jpeg; 修改日期=「星期三,1997年2月12日16:29:51 -0500」;' – 2011-03-28 18:19:48

+0

@Marc:直到你把一個空格在文件名。 http://kb.mozillazine.org/Filenames_with_spaces_are_truncated_upon_download – SLaks 2011-03-28 18:20:42