вернуть загружаемый zip-файл, используя $ .post или $ .get - PullRequest
1 голос
/ 29 декабря 2011

Я делаю zip-файл и хочу вернуть загружаемый файл, но не могу найти часть возвращаемого файла, даже если я попробовал несколько примеров, которые нашел в Интернете.

это код, который я использую для этого сейчас, он работает без $.post(), но мне нужно, чтобы он работал с jquery. все идеи приветствуются

$('.zipFiles').live('click', function () {
            $.post('/Home/ZipFiles');
});


//return a file
public FileResult ZipFiles()
    {
        var filesToZip = Session["DownloadQue"] as List<string>;
        var savedZipFile = Server.MapPath("~/App_Data/") + DateTime.Now.Minute + ".zip";

        if (filesToZip != null && filesToZip.Count > 0)
            using (var zip = new ZipFile(savedZipFile))
            {                    
                foreach (string item in filesToZip)
                {
                    var path = Server.MapPath(Path.Combine("~/Pics/", item));
                    zip.AddFile(path, @"\cf");
                }

                zip.Comment = "this was made online";                    
                zip.Save();
            }

        return File(savedZipFile, System.Net.Mime.MediaTypeNames.Application.Zip);
    }

Ответы [ 3 ]

2 голосов
/ 29 декабря 2011

Вы можете вернуть содержимое файла или результат действия через jQuery.Здесь, в вашем коде /home/zipfiles возвращает содержимое .zip, и я думаю, что вы не хотите показывать / печатать содержимое zip.

$('.zipFiles').live('click', function () {
            $.post('/Home/ZipFiles',"",function(data){
               alert(data);
            });
});

Чтобы загрузить файл, попробуйте это:

1 голос
/ 29 декабря 2011

Как уже упоминалось, вы не можете скачать файл через AJAX, вам нужно немного поработать.

Во-первых, в вашем методе действий вместо возврата zip-файла создайте guid (или другое случайное, но уникальное имя) и сохраните его на своем сервере. Ваш метод действия должен вернуть URL-адрес этого файла.

Используйте успешный обратный вызов для $ .post для фактической загрузки файла. Сделайте так, чтобы обратный вызов проанализировал ваш URL, а затем откройте новое окно / фрейм, указывающий на этот URL.

0 голосов
/ 14 июня 2013

Я знаю, что критерием является использование $ .get или $ .post ...

, но с использованием "$ ('form'). Submit ();" было то, что я искал и работал идеально для меня

Оставляет пользователя на той же странице и загружает результат файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...