【问题标题】:Zip file created but not downloaded MVC C#已创建但未下载的 Zip 文件 MVC C#
【发布时间】:2014-10-14 04:27:14
【问题描述】:

在我看来,我有一些复选框,它们的值包括一个 Uri。 在控制器中,我获取选中复选框的值,下载它们的内容(文本)并压缩它们。

看起来 zip 文件已创建,但当我尝试下载时,它无法正常工作。 我没有收到任何错误。更糟糕的是,我得到了 Status 200。

视图中的 AJAX。

 $(document).ready(function () {
    $('#GetTotal').on('click', function () {
        var prices = [];
        $('input[name="check[]"]:checked').each(function () {

            prices.push($(this).attr("value"));
        });
        $.ajax({
            url: "/AzureSearchService/DownloadAll",
            type: "GET",
            data: { coursePrices: prices },
            dataType: "json",
            cache: false,
            traditional: true,
            success: function () {
                alert("ajax request to server succeed");
            }
        });
    });
});

复选框

<input type="checkbox" name="check[]" value="@url" class="checkbox1" style="margin-left: 5px; margin-right: 5px;">

控制器

public ActionResult DownloadAll(IEnumerable<Uri> coursePrices)
{
    var outputStream = new MemoryStream();
    using (var zip = new ZipFile())
    {
        foreach (Uri uri in coursePrices)
        {
            System.Net.WebClient wc = new System.Net.WebClient();
            Stream s = wc.OpenRead(uri);
            zip.AddEntry(uri.AbsolutePath +  ".txt", s);                 
        }

        zip.Save(outputStream);
    }

    outputStream.Position = 0;
    return File(outputStream, "application/zip", "all.zip");
}

请在下方查看浏览器的状态 What Browser Returns Status 200

【问题讨论】:

    标签: c# asp.net-mvc razor asp.net-ajax dotnetzip


    【解决方案1】:

    如果我正确理解了您的问题,那么您正在尝试从 ajax 调用下载文件。 仅从 javascript 将文件下载到客户端计算机通常很棘手。您可以考虑执行以下操作之一:

    1. 使用第三方插件,如 jQuery 文件下载 http://johnculviner.com/jquery-file-download-plugin-for-ajax-like-feature-rich-file-downloads/

    2. 您可以将复选框包装在如下表单中:
      @using(Html.BeginForm("DownloadAll", "AzureSearchService", /* 附加参数/))
      {
      @
      你的复选框在这里 *@
      }

    【讨论】:

    • Ajax调用只返回urls..然后通过控制器完成工作
    • 因此,您将 Uris 列表传递给控制器​​,控制器向每个控制器发送请求,将结果保存到 txt 文件中并将它们压缩在一起。毕竟,您希望将创建的 zip 文件下载到客户端计算机。我是对的还是我误解了你的问题?
    • 是的,你是对的。这正是我想要做的。我确实得到了 uris 和所有内容,但下载不起作用
    • 问题在于,出于安全原因,浏览器不允许您将文件从 javascript 保存到计算机。尝试我建议的方法之一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    相关资源
    最近更新 更多