1

実際のファイルのダウンロードを行うこの関数があります (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が初めてなので、まだ自分の道を見つけています。

4

1 に答える 1

0

ありえないと思います。このスレッドに基づく: Download a file by jQuery.Ajax、JavaScript はファイルをユーザーのコンピューターに直接保存できません。ただし、jQuery File Download Plugin ( http://johnculviner.com/post/2012/03/22/Ajax-like-feature-rich-file-downloads-with-jQuery-File-Download.aspx ) とそれがあなたのために働くかどうか見てください。

于 2013-02-09T12:34:13.323 に答える