実際のファイルのダウンロードを行うこの関数があります (AzureTest というコントローラーで)。そのMVCプロジェクト:
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;
}
これは、次の関数によって呼び出されます。
[HttpPost]
public JsonResult Download()
{
try
{
bool bDlKit = DownloadKit();
}
catch (Exception ex)
{
//ToDo
}
return Json(null);
}
cshtml ファイルには、次の JavaScript コードが含まれています。
$("#btnGetKit").click(function () {
$("#btnGetKit").hide();
$.ajax({
url: "AzureTest/Download",
type: "POST",
success: function () {
$("#btnGetKit").show();
}
})
}
問題は次のとおりです。ページの読み込み時に DownloadKit() を呼び出すと、すべてが機能し、ファイルをダウンロードするように求められます。ajax メカニズムを使用すると、コードは正常に動作しますが、ファイルをダウンロードするプロンプトが表示されません。あたかも OutputStream が書き込まれていないかのようです。
誰かがいくつかの指針を与えてくれて本当に感謝しています。私はMVCが初めてなので、まだ自分の道を見つけています。