2008-12-06 12 views
9

Nie jestem pewien, jak wyrazić to pytanie ... więc zmiany są mile widziane! W każdym razie ... tutaj idzie.Jak ustawić nazwę pliku podczas przesyłania strumieniowego pliku PDF w przeglądarce?

Obecnie korzystam z raportów Crystal do generowania plików Pdf i po prostu przesyłam dane wyjściowe do użytkownika. Mój kod wygląda następująco:

System.IO.MemoryStream stream = new System.IO.MemoryStream(); 

stream = (System.IO.MemoryStream)this.Report.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); 

this.Response.Clear(); 
this.Response.Buffer = true; 
this.Response.ContentType = "application/pdf"; 
this.Response.BinaryWrite(stream.ToArray()); 
this.Response.End(); 

Po uruchomieniu tego kodu przesyła plik PDF do przeglądarki, otwierając program Acrobat Reader. Działa świetnie!

Mój problem polega na tym, że użytkownik próbuje zapisać plik, który domyślnie przyjmuje nazwę pliku ... w tym przypadku domyślnie jest to CrystalReportPage.pdf. Czy mimo to mogę to ustawić? Jeśli tak to jak?

Każda pomoc zostanie doceniona.

Odpowiedz

17

Zazwyczaj poprzez nagłówku Content-Disposition - czyli

Content-Disposition: inline; filename=foo.pdf 

więc wystarczy użyć Headers.Add lub AddHeader, czy cokolwiek to jest, ze:

response.Headers.Add ("Treści -Disposition "," inline; filename = foo.pdf ");

(inline jest "show w przeglądarce", przywiązanie jest "zapisz jako plik")

7
System.IO.MemoryStream stream = new System.IO.MemoryStream(); 

stream = (System.IO.MemoryStream)this.Report.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat); 

this.Response.Clear(); 
this.Response.Buffer = true; 
this.Response.ContentType = "application/pdf"; 
this.Response.AddHeader("Content-Disposition", "attachment; filename=\""+FILENAME+"\""); 
this.Response.BinaryWrite(stream.ToArray()); 
this.Response.End();