How to set the name of the file when streaming a P

2019-04-21 17:51发布

问题:

Not sure exactly how to word this question ... so edits are welcomed! Anyway ... here goes.

I am currently use Crystal Reports to generated Pdfs and just stream the output to the user. My code looks like the following:

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

After this code runs it streams the Pdf to the browser opening up Acrobat Reader. Works great!

My problem is when the user tries to save the file it defaults to the actual file name ... in this case it defaults to CrystalReportPage.pdf. Is there anyway I can set this? If so, how?

Any help would be appreciated.

回答1:

Usually, via the content-disposition header - i.e.

Content-Disposition: inline; filename=foo.pdf

So just use Headers.Add, or AddHeader, or whatever it is, with:

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

(inline is "show in browser", attachment is "save as a file")



回答2:

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