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

本文关键字:Azure blob 下载 不起作用 ajax MVC 项目 | 更新日期: 2023-09-27 17:58:32

我有这个函数,它可以进行实际的文件下载(在一个名为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的新手,所以我仍然在四处寻找。

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

我认为这是不可能的。基于这个线程:通过jQuery.Ajax下载文件,JavaScript无法将文件直接保存到用户的计算机上。但是,请查看jQuery文件下载插件(http://johnculviner.com/post/2012/03/22/Ajax-like-feature-rich-file-downloads-with-jQuery-File-Download.aspx)看看这对你是否有效。