adding header to http response in an action inside a controller in asp.net/mvc

前端 未结 5 2117
花落未央
花落未央 2021-02-13 18:14

I am streaming data from server to client for download using filestream.write. In that case what is happening is that I am able to download the file but it does not

5条回答
  •  一个人的身影
    2021-02-13 18:47

    Yes, You are doing it the wrong way try this, you should add the header inside your action not as an attribute header to your method.

    HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename=" & name)
    

    or

    Request.RequestContext.HttpContext.Response.AddHeader("Content-Disposition", "Attachment;filename=" & name)
    

    Update As i understand you are making an ajax call to your controller/action which wont work for file download by directly calling an action. You can achieve it this way.

    public void Download(string name)
            {
    //your logic. Sample code follows. You need to write your stream to the response.
    
                var filestream = System.IO.File.ReadAllBytes(@"path/sourcefilename.pdf");
                var stream = new MemoryStream(filestream);
                stream.WriteTo(Response.OutputStream);
                Response.AddHeader("Content-Disposition", "Attachment;filename=targetFileName.pdf");
                Response.ContentType = "application/pdf";
            }
    

    or

        public FileStreamResult Download(string name)
        {
            var filestream = System.IO.File.ReadAllBytes(@"path/sourcefilename.pdf");
            var stream = new MemoryStream(filestream);
    
    
            return new FileStreamResult(stream, "application/pdf")
            {
                FileDownloadName = "targetfilename.pdf"
            };
        }
    

    In your JS button click you can just do something similar to this.

     $('#btnDownload').click(function () {
                window.location.href = "controller/download?name=yourargument";
        });
    

提交回复
热议问题