C# 使用ajax时Azure blob下载在MVC项目中不起作用

C# 使用ajax时Azure blob下载在MVC项目中不起作用,c#,asp.net-mvc,jquery,azure,C#,Asp.net Mvc,Jquery,Azure,我有这个功能,可以下载实际的文件(在一个名为AzureTest的控制器中);这是一个MVC项目: private bool DownloadKit() { bool bReturn, bSuccess = false; CloudStorageAccount account = CloudStorageAccount.FromConfigurationSetting("ConnString"); CloudBlobClient

我有这个功能,可以下载实际的文件(在一个名为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还不熟悉,所以我仍然在寻找出路。

我认为这是不可能的。基于此线程:,JavaScript无法将文件直接保存到用户的计算机。不过,一定要看看jQuery文件下载插件()是否适合您。

谢谢。这是有用的。但是,我需要下载运行时生成的文件,因此没有href。对于不同的用户,文件也会有所不同。我仍在调查如何做到这一点。一旦找到解决方案,我将在这里发布。我已经得出结论,这是不可能的。解决方法是将动态生成的文件放在虚拟目录位置。然后将该位置用作href。