I have this function which does the actual file download (in a controller called AzureTest); its a MVC project:
private bool DownloadKit()
{
bool bReturn, bSuccess = false;
CloudStorageAccount account = CloudStorageAccount.FromConfigurationSetting("ConnString");
CloudBlobClient cbcClient = account.CreateCloudBlobClient();
BlobRequestOptions options = new BlobRequestOptions();
options.UseFlatBlobListing = true;
CloudBlobContainer cbcFiles = new CloudBlobContainer("files", cbcClient);
CloudBlob cbKit = cbcFiles.GetBlobReference("Kit.exe");
ControllerContext.HttpContext.Response.Clear();
ControllerContext.HttpContext.Response.ContentType = "application/octet-stream";
ControllerContext.HttpContext.Response.AddHeader("Content-Disposition", "attachment; filename=Kit.exe");
MemoryStream msFile = new MemoryStream();
cbKit.DownloadToStream(msFile);
msFile.Position = 0;
ControllerContext.HttpContext.Response.OutputStream.Write(msFile.ToArray(), 0, msFile.ToArray().Length);
ControllerContext.HttpContext.Response.Flush();
bReturn = bSuccess;
return bReturn;
}
This is called by the following function:
[HttpPost]
public JsonResult Download()
{
try
{
bool bDlKit = DownloadKit();
}
catch (Exception ex)
{
//ToDo
}
return Json(null);
}
Now the cshtml file has the following javascript code:
$("#btnGetKit").click(function () {
$("#btnGetKit").hide();
$.ajax({
url: "AzureTest/Download",
type: "POST",
success: function () {
$("#btnGetKit").show();
}
})
}
Here is the problem: When I call DownloadKit() right at the page load, then everything work and I get prompted to download the file. When I use the ajax mechanism, even though the code works fine, there is no prompt to download the file. Its as if the OutputStream is not being written to.
I will really appreciate someone giving some pointers. I am new to MVC, so still finding my way around.