Как задать имя файла при потоковой передаче PDF в браузере?

Не уверен, как именно сформулировать этот вопрос ... так что правки приветствуются! В любом случае... здесь идет.

в настоящее время я использую Crystal Reports для создания PDF-файлов и просто передаю вывод пользователю. Мой код выглядит следующим образом:

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

после запуска этого кода он передает Pdf в браузер, открывая Acrobat Reader. Отлично работает!

моя проблема заключается в том, когда пользователь пытается сохранить файл по умолчанию для фактического имени файла ... в этом случае по умолчанию используется CrystalReportPage.документ pdf. Я могу это как-нибудь настроить? Если да, то как?

любая помощь будет оценили.

2 ответов


обычно, через заголовок content-disposition-т. е.

Content-Disposition: inline; filename=foo.pdf

поэтому просто используйте заголовки.Добавьте, или AddHeader, или что бы это ни было, с помощью:

ответ.Заголовки.Добавить ("Content-Disposition", " inline; filename=foo.pdf");

(inline - "показать в браузере", вложение - "сохранить как файл")


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