Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET MVC FileStreamResult, fileDownloadName is not used

The following returns a PDF which the browser tries to directly display inline. This works correctly. However, if I try to download the file, the download name is not "myPDF.pdf", but instead the ID in the route (myapp/controller/PDFGenerator/ID). Is it possible to set the file download name to be "myPDF.pdf"?

public FileStreamResult PDFGenerator(int id)
{
    MemoryStream ms = GeneratePDF(id);

    byte[] file = ms.ToArray();
    MemoryStream output = new MemoryStream();
    output.Write(file, 0, file.Length);
    output.Position = 0;
    HttpContext.Response.AddHeader("content-disposition", 
    "inline; filename=myPDF.pdf");

    return File(output, "application/pdf", fileDownloadName="myPDF.pdf");
}
like image 246
user1620141 Avatar asked Apr 07 '13 13:04

user1620141


2 Answers

No, this is not possible with a PDF displayed inline. You could achieve this if you send the Content-Disposition header with as an attachment:

public ActionResult PDFGenerator(int id)
{
    Stream stream = GeneratePDF(id);
    return File(stream, "application/pdf", "myPDF.pdf");
}

Also notice how I removed the unnecessary MemoryStream you were using and loading the PDF in memory where you could have directly streamed it to the client which would have been far more efficient.

like image 144
Darin Dimitrov Avatar answered Nov 13 '22 02:11

Darin Dimitrov


If you are using FileStreamResult to download the file, try using this in controller

Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment; filename=FileName.pdf");
like image 33
Nalan Madheswaran Avatar answered Nov 13 '22 00:11

Nalan Madheswaran