Записать zip-файлы в MemoryStream - PullRequest
       13

Записать zip-файлы в MemoryStream

0 голосов
/ 26 сентября 2018

У меня есть действие контроллера, которое создает zip-файл и отправляет его пользователю для загрузки.Проблема в том, что zip-файл создается, но он пуст.Почему-то он не записывает файлы изображений в MemoryStream.Интересно, чего мне не хватает.Если я запишу zip-файл на диск, все будет работать так, как ожидалось, но я бы не стал сохранять файлы на диск, если смогу избежать этого.Это то, что я пытался использовать dotnetzip:

public ActionResult DownloadGraphs()
    {
        var state = Session["State"];
        using (ZipFile zip = new ZipFile())
        {
            if (state == "IA")
            {
                zip.AddFile(Server.MapPath("~/Content/DataVizByState/FallGraphs/Watermarked/Fall_IA.jpg"), "");
                zip.AddFile(Server.MapPath("~/Content/DataVizByState/SpringGraphs/Watermarked/Spring_IA.jpg"), "");
            }
            MemoryStream output = new MemoryStream();
            zip.Save(output);
            output.Seek(0, SeekOrigin.Begin);
            var fileName = state + "Graphs.zip";
            return File(output, "application/zip", fileName);
        }
    }

Это вызывает загрузку в представлении, основанном на нажатии кнопки:

$('#graphDwnldBtn').click(function (evt) {
    window.location = '@Url.Action("DownloadGraphs", "DataSharing")';
})

Нужно ли использовать StreamWriter или Reader или что-то?Это первый раз, когда я пытался сделать что-то подобное, и это было собрано вместе при чтении различных сообщений stackoverflow ...

1 Ответ

0 голосов
/ 26 сентября 2018

Глупые ошибки: Session["State"] - это object, поэтому переменная state получилась как object вместо string, как мне нужно, чтобы моя условная инструкция оценивалась правильно.Я бросил state на string, чтобы исправить это.Фиксированный код:

public ActionResult DownloadGraphs()
    {
        var state = Session["State"].ToString(); 
        using (ZipFile zip = new ZipFile())
        {
            if (state == "IA")
            {
                zip.AddFile(Server.MapPath("~/Content/DataVizByState/FallGraphs/Watermarked/Fall_IA.jpg"), "");
                zip.AddFile(Server.MapPath("~/Content/DataVizByState/SpringGraphs/Watermarked/Spring_IA.jpg"), "");
            }
            MemoryStream output = new MemoryStream();
            zip.Save(output);
            output.Seek(0, SeekOrigin.Begin);
            var fileName = state + "Graphs.zip";
            return File(output, "application/zip", fileName);
        }
    }
...