C# MVC create zip put files in it(готово) теперь распакуйте и откройте файлы
Привет всем, у меня сейчас есть он, поэтому моя программа создает zip-файл с отчетами в zip-файле. Мое действие контроллера возвращает файл, который является zip-файлом. У меня это происходит в успехе моего "Аякса".
Теперь, как я мог бы на следующем шаге, возможно, в успехе или я даже не уверен, где я должен иметь его, чтобы я мог вызвать другой метод для распаковки файлов. Затем откройте файлы, которые были распакованы?
Что бы вы все сделали?
Вот что у меня сейчас есть
$('#btnGetChecks').on('click', function () { var arrChkBoxes = []; var arrSelectedQIDs = []; //$('input:checked').each(function() { //}); with 0 - ^(0|\+?[1-9]\d*)$ /^-?[0-9]+$/ // $(this).val($(this).val().replace(/[^\d].+/, "")); // if (!(keyCode >= 48 && keyCode <= 57) // Turn all selected checkbox T/F values into QuoteIDs $("input:checked").each(function (index, value) { arrChkBoxes.push($(value).val()); }); // Push all QuoteIDs into new array $.each(arrChkBoxes, function (key, value) { if (IsPositiveInteger(value)) { arrSelectedQIDs.push(value); } }); $.ajax({ type: "GET", url: "/Service/ExportFiles/", contentType: "application/json; charset=utf-8", traditional: true, data: { "quoteIDs": arrSelectedQIDs }, success: function (data) { window.location = '/Service/DownloadAsZip?mimeType=' + data; //window.location = '/Service/UnZipDownload'; }, error: function (request, status, error) { alert("Error Generating Files"); //+ request.responseText); } }); }); [HttpGet] public void UnZipDownload() { if(TempData["ZipName"] != null) { string zipName = TempData["ZipName"] as string; string downloadPath = new KnownFolder(KnownFolderType.Downloads).Path; string filePath = new KnownFolder(KnownFolderType.Downloads).Path; downloadPath = Path.GetFullPath(downloadPath); //Make sure last char on path doesn't allow malicious code outside of it. if (!downloadPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)) downloadPath += Path.DirectorySeparatorChar; using (ZipArchive archive = ZipFile.OpenRead(filePath + zipName)) { foreach(ZipArchiveEntry entry in archive.Entries) { if(entry.FullName.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase)) { entry.ExtractToFile(filePath); } } } } } /* Uses System.IO.Compression Library */ [HttpGet] public virtual ActionResult DownloadAsZip(string mimeType) { if (TempData["Files"] != null) { List<ServiceFile> lstFiles = TempData["Files"] as List<ServiceFile>; byte[] bytearray = null; string timeNow = DateTime.Now.ToString("MM-dd-yyyy-HHmmss"); string fileName = "Service" + timeNow + ".zip"; using (MemoryStream ms = new MemoryStream()) { // Creates the .zip using (ZipArchive archive = new ZipArchive(ms, ZipArchiveMode.Create, true)) { foreach (ServiceFile file in lstFiles) // iterate through each file { // Creates empty file and names it inside of .zip ZipArchiveEntry zipItem = archive.CreateEntry(file.FileName + file.Extension); // adds file to zipItem using (MemoryStream ms4file = new MemoryStream(file.FileBytes)) { using (Stream stream = zipItem.Open()) { ms4file.CopyTo(stream); } } } } bytearray = ms.ToArray(); } TempData["ZipName"] = fileName; return File(bytearray, "application/zip", fileName); } else { return new EmptyResult(); } }
Что я уже пробовал:
Я попытался сделать это в своем успехе под линией, которая была создана, но она перешла к новому методу, но тогда мой zip не был создан.