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