【问题标题】:Trying to download Zip file using ajax but can't able to download in asp.net mvc尝试使用 ajax 下载 Zip 文件,但无法在 asp.net mvc 中下载
【发布时间】:2020-05-22 14:26:51
【问题描述】:

我正在尝试使用 ajax 下载 zip 文件, 我从控制器端返回如下。如果我使用“window.location.href”,我可以下载 但我想用ajax下载。

控制器返回码:

using (MemoryStream memoryStream = new MemoryStream())
{
   zip.Save(memoryStream);
   return File(memoryStream.ToArray(), "application/zip", zipName);
}

视图侧的ajax调用

 $.ajax({
                url: "url",
                cache: false,
                type: "GET",
                contentType: "application/zip; charset=utf-8",
                success: function (results) {
                    debugger
                    var result = results;
                    debugger
                }
            });

请帮助我使用 ajax 下载 zip 文件

提前致谢

【问题讨论】:

  • 答案对你有用吗?
  • 嘿嗨,我正在尝试,但在这一行出现错误 var url = window.URL.createObjectURL(data);在ajax成功。我可以使用 window.location.href 下载,但如果我使用它,我会在该页面的其他字段中遇到一些问题,所以我想使用 ajax 下载它。但是我收到这样的错误“无法在'URL'上执行'createObjectURL':找不到与提供的签名匹配的函数。”
  • 您需要确保向您提到的函数提供 blob 类型的数据,我已经更新了我的答案,请参阅调用'createObjectUrl'之前的行
  • 我试过了,但我下载的是空的 zip 文件
  • 1.您确定在您的控制器中返回的数据流确实是一个 zip 文件吗?

标签: c# ajax asp.net-mvc


【解决方案1】:

1 在您的控制器或剃刀时代

  • 一个。删除控制器中的 using
  • 乙。无需在直播中拨打.ToArray()
public IActionResult DownloadFile(//params)
{
   var memoryStram = //wherever it is you are getting your stream from

   zip.Save(memoryStream);

   memoryStream.Position = 0; // i tend to set this if i dont know the state of the stream

   return File(memoryStream, "application/zip", zipName);
}

2 你的 ajax 调用

选项 1: 进行ajax调用,完成后重定向以获取文件

function download(e) {
        $.ajax({
            type: "POST",
            url: '/url', //call your controller and action
            contentType: "application/json; charset=utf-8",
            dataType: "json", // dont forget this is required
        }).done(function () {
                //use window.location.href for redirect to download action for download the file
                window.location.href = '/api/AjaxAPI/Download';
        });
    }

选项 2:一次性完成所有操作

$.ajax({
        url: '/url',     // url to your controller/action
        method: 'GET',
        contentType: "application/json; charset=utf-8",
        dataType: "json",           // dont forget this is required
        success: function (data) {
            var a = document.createElement('a');
            var blob = new Blob([data], {type: "application/zip"})
            var url = window.URL.createObjectURL(blob);
            a.href = url;
            a.download = 'myfile.zip';
            document.body.append(a);
            a.click();
            a.remove();
            window.URL.revokeObjectURL(url);
        }
 });

这些是我能想到的 2 个。我相信还有更多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多