asp.net-mvcpdf-generationfilestreamresult

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");
}

Solution

  • 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.