2012-06-21 46 views
0

我寫的SharePoint實現上絲帶一個按鈕來下載多個文件以zip的應用...郵編與Firefox和Chrome

一切順利一個響應內容類型,一切順利。 ..但是,當我試圖與Chrome或Firefox下載zip他們做什麼..

我的代碼是這樣的:

private void WriteStreamToResponse(MemoryStream ms) 
    { 
     if (ms.Length > 0) 
     { 
      string filename = DateTime.Now.ToFileTime().ToString() + ".zip"; 
      Response.Clear(); 
      Response.ClearHeaders(); 
      Response.ClearContent(); 
      Response.ContentType = "application/zip"; //also tried application/octect and application/x-zip-compressed 
      Response.AddHeader("Content-Length", ms.Length.ToString()); 
      Response.AddHeader("Content-Disposition", "attachment; filename=" + filename); 

      byte[] buffer = new byte[65536]; 
      ms.Position = 0; 
      int num; 
      do 
      { 
       num = ms.Read(buffer, 0, buffer.Length); 
       Response.OutputStream.Write(buffer, 0, num); 
      } 

      while (num > 0); 

      Response.Flush(); 
     } 
    } 
+1

您是否嘗試過使用真實文件的response.writefile?它使用IE嗎?內容類型頭是正確的(都支持),所以問題在別的地方。嘗試在Flush()之前添加一個Response.End()。 – JotaBe

回答

0

你試過Application/octet-stream的MIME類型?

private void WriteStreamToResponse(MemoryStream ms) 
{ 
    if (ms.Length > 0) 
    { 
     byte[] byteArray = ms.ToArray(); 
     ms.Flush(); 
     ms.Close(); 

     string filename = DateTime.Now.ToFileTime().ToString() + ".zip"; 
     Response.BufferOutput = true; 
     Response.Clear(); 
     Response.ClearHeaders(); 
     Response.ClearContent(); 
     Response.ContentType = "application/octet-stream"; 
     Response.AddHeader("Content-Length", ms.Length.ToString()); 
     Response.AddHeader("Content-Disposition", "attachment; filename=" + filename); 

     Response.BinaryWrite(byteArray); 
     Response.End(); 

    } 
} 
+0

試過......但沒有! –

1

刪除內容長度,也有同花順(),然後結束()在你的代碼,不要使用關閉()在你的代碼的最後,你可以使用之前你聲明一切。當你不知道文件類型是什麼時,通常使用Octet-stream,所以如果你知道文件類型是什麼,那麼遠離它。使用application/zip作爲Content-Disposition。

 string filename = DateTime.Now.ToFileTime().ToString() + ".zip"; 
     Response.Clear(); 
     Response.BufferOutput = false; 
     Response.ClearHeaders(); 
     Response.ClearContent(); 
     Response.ContentType = "application/x-zip-compressed"; //also tried application/octect and application/x-zip-compressed   
     Response.AddHeader("Content-Disposition", "attachment; filename=" + filename); 

     byte[] buffer = new byte[65536]; 
     ms.Position = 0; 
     int num; 
     do 
     { 
      num = ms.Read(buffer, 0, buffer.Length); 
      Response.OutputStream.Write(buffer, 0, num); 
     } 

     while (num > 0); 

     Response.Flush(); 
     Response.End();