По api получен zip-файл. Как его обработать? Php
По api нужно получить данные, и они приходят в архиве. На скрине видно, что в ответе отображаются кракозябры. Если нажать на «Save response», то архив корректно сохраняется. Как кодом сохранить этот архив в php? Спасибо.

Отслеживать
задан 17 дек 2021 в 12:12
5 3 3 бронзовых знака
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Получить данные запросом на указанный API (curl, Guzzle, любой другой вариант), сохранить в переменную $content , сохранить как файл с помощью file_put_contents(‘путь/архив.zip’, $content)
Отслеживать
ответ дан 17 дек 2021 в 12:24
1,000 5 5 серебряных знаков 13 13 бронзовых знаков
Я для скачивания в браузере использую такой трюк: На сервере:
echo ' ';
$.ajax(< url, method: 'POST', data, success: function (data) < $('#downloaded-files').html(data); $('#downloaded-files a').each(function () < this.click(); >) > >);
Отслеживать
ответ дан 17 дек 2021 в 12:20
Виктор Карев Виктор Карев
1,543 1 1 золотой знак 7 7 серебряных знаков 11 11 бронзовых знаков
- php
- api
- zip
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.3.2953
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Как открыть ZIP-файл на Android?
ZIP — это формат архивации файлов и сжатиях данных без потерь. Такой формат удобен для передачи множества файлов, а уменьшенный размер станет дополнительным плюсом. Сжатие файлов, как правило, происходит с помощью алгоритма Deflate. Android не способен открывать данный формат «из коробки», поэтому единственным решением станет использование сторонних приложений в Google Play. Однако какое из них наилучшее и проверенное?

Ранее Google выпустила приложение Files — это файловый менеджер. С его помощью можно в том числе открывать ZIP-архивы. Для этого скачиваем приложение по ссылке ниже. После установки открываем его, переходим в раздел «Просмотры». Если файл расположен в «Загрузках», можно сразу открыть категорию «Скачанные файлы». В нашем случае ZIP-архив был скачан с Telegram, поэтому переходим во внутреннюю память, ищем папку «Telegram», далее переходим к «Telegram Documents». В данной папке должен располагаться скачанный файл. Если нажать на него, приложение предложит извлечь файлы архива, после нажатия на «Продолжить» откроется небольшое окно с предпросмотром документов.


Нажимаем на «Готово», после чего произойдет распаковка архива в папку с аналогичным названием.
Files — крайне удобное и полезное приложение от Google
В разделе «Обмен» можно делиться видео, приложениями и другими данными с людьми поблизости, у которых установлено данное решение.
Отдельного внимания заслуживает интерфейс, выполненный в стиле Material Design второй версии со шрифтами Google Sans. Главное окно Files отображает количество используемой памяти и анализирует хранилище на наличие ненужных файлов. Чуть ниже отображаются дубликаты, кэш приложений с изображениями и видеороликами, скачанные и большие файлы. Простыми словами, Google Files, помимо поддержки ZIP-файлов, понравится многими другими возможностями. Рекомендуем!
Приложение: Google Files: освободите место на телефоне Разработчик: Google LLC Категория: Инструменты Версия: 1.0.224103129 Цена: Бесплатно Скачать: Google Play Приложением уже заинтересовались: 0 человек

Теги
- Google Play
- Операционная система Android
- Приложения для Андроид
Наши соцсети
Новости, статьи и анонсы публикаций
Zip File. Create From Directory Метод
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Создает ZIP архив, содержащий файлы и каталоги из указанного каталога.
Перегрузки
Создает ZIP-архив в указанном потоке, содержащий файлы и каталоги из указанного каталога.
Создает ZIP архив, содержащий файлы и каталоги из указанного каталога.
Создает ZIP-архив в указанном потоке, который содержит файлы и каталоги из указанного каталога, использует указанный уровень сжатия и при необходимости включает базовый каталог.
Создает ZIP-архив, содержащий файлы и каталоги из указанного каталога, использует указанный уровень сжатия и необязательно включает базовый каталог.
Создает ZIP-архив в указанном потоке, который содержит файлы и каталоги из указанного каталога, использует указанный уровень сжатия и кодировку символов для имен записей и при необходимости включает базовый каталог.
Создает ZIP-архив, содержащий файлы и каталоги из указанного каталога, использует указанный уровень сжатия и кодировку символов для имен записей и необязательно включает базовый каталог.
CreateFromDirectory(String, Stream)
Создает ZIP-архив в указанном потоке, содержащий файлы и каталоги из указанного каталога.
public: static void CreateFromDirectory(System::String ^ sourceDirectoryName, System::IO::Stream ^ destination);
public static void CreateFromDirectory (string sourceDirectoryName, System.IO.Stream destination);
static member CreateFromDirectory : string * System.IO.Stream -> unit
Public Shared Sub CreateFromDirectory (sourceDirectoryName As String, destination As Stream)
Параметры
sourceDirectoryName String
Путь к архивируемому каталогу, заданный как относительный или абсолютный путь. Относительный путь интерпретируется относительно текущего рабочего каталога.
destination Stream
Поток, в котором хранится ZIP-архив.
Исключения
sourceDirectoryName имеет значение Empty, содержит только пробел или по крайней мере один недопустимый символ.
Поток destination не поддерживает запись.
Параметр sourceDirectoryName или destination имеет значение null .
В sourceDirectoryName указанном пути имя файла или и то, и другое превышает максимальную длину, определенную системой.
Параметр sourceDirectoryName недопустим или не существует (например, он соответствует неподключенному диску).
Не удалось открыть файл в указанном каталоге.
При открытии архивного файла произошла ошибка ввода-вывода.
sourceDirectoryName содержит недопустимый формат.
Комментарии
Структура каталогов из файловой системы сохраняется в архиве. Если каталог пуст, создается пустой архив. Эта перегрузка метода не включает базовый каталог в архив и не позволяет указать уровень сжатия. Если вы хотите включить базовый каталог или указать уровень сжатия, вызовите перегрузку CreateFromDirectory(String, Stream, CompressionLevel, Boolean) метода. Если файл в каталоге не удается добавить в архив, архив остается неполным и недопустимым, а метод создает IOException исключение.
Применяется к
CreateFromDirectory(String, String)
Создает ZIP архив, содержащий файлы и каталоги из указанного каталога.
public: static void CreateFromDirectory(System::String ^ sourceDirectoryName, System::String ^ destinationArchiveFileName);
public static void CreateFromDirectory (string sourceDirectoryName, string destinationArchiveFileName);
static member CreateFromDirectory : string * string -> unit
Public Shared Sub CreateFromDirectory (sourceDirectoryName As String, destinationArchiveFileName As String)
Параметры
sourceDirectoryName String
Путь к архивируемому каталогу, заданный как относительный или абсолютный путь. Относительный путь интерпретируется относительно текущего рабочего каталога.
destinationArchiveFileName String
Путь создаваемого архива, заданный как относительный или абсолютный путь. Относительный путь интерпретируется относительно текущего рабочего каталога.
Исключения
Параметр sourceDirectoryName или destinationArchiveFileName является Empty, содержит только пробелы или хотя бы один недопустимый символ.
Параметр sourceDirectoryName или destinationArchiveFileName имеет значение null .
В sourceDirectoryName или destinationArchiveFileName длина указанного пути, имени файла или обоих параметров превышает установленное в системе максимальное значение.
Параметр sourceDirectoryName недопустим или не существует (например, он соответствует неподключенному диску).
destinationArchiveFileName уже существует.
Не удалось открыть файл в указанном каталоге.
При открытии архивного файла произошла ошибка ввода-вывода.
Параметр destinationArchiveFileName задает каталог.
Вызывающий код не имеет необходимого разрешения на доступ к каталогу, указанному в sourceDirectoryName , или к файлу, указанному в destinationArchiveFileName .
sourceDirectoryName или destinationArchiveFileName содержит недопустимый формат.
ZIP-архив не поддерживает запись.
Примеры
В этом примере показано, как создать и извлечь ZIP-архив с помощью ZipFile класса . Он сжимает содержимое папки в ZIP-архив, а затем извлекает это содержимое в новую папку. Чтобы использовать класс ZipFile, укажите в проекте ссылку на сборку System.IO.Compression.FileSystem .
using System; using System.IO.Compression; class Program < static void Main(string[] args) < string startPath = @".\start"; string zipPath = @".\result.zip"; string extractPath = @".\extract"; ZipFile.CreateFromDirectory(startPath, zipPath); ZipFile.ExtractToDirectory(zipPath, extractPath); >>
open System.IO.Compression let startPath = @".\start" let zipPath = @".\result.zip" let extractPath = @".\extract" ZipFile.CreateFromDirectory(startPath, zipPath) ZipFile.ExtractToDirectory(zipPath, extractPath)
Imports System.IO.Compression Module Module1 Sub Main() Dim startPath As String = ".\start" Dim zipPath As String = ".\result.zip" Dim extractPath As String = ".\extract" ZipFile.CreateFromDirectory(startPath, zipPath) ZipFile.ExtractToDirectory(zipPath, extractPath) End Sub End Module
Комментарии
Структура каталогов из файловой системы сохраняется в архиве. Если каталог пуст, создается пустой архив. Эта перегрузка метода не включает базовый каталог в архив и не позволяет указать уровень сжатия. Если вы хотите включить базовый каталог или указать уровень сжатия, вызовите перегрузку CreateFromDirectory(String, String, CompressionLevel, Boolean) метода.
Если архив уже существует, IOException создается исключение. Если запись с указанным именем уже существует в архиве, создается вторая запись с идентичным именем.
Если файл в каталоге не удается добавить в архив, архив остается неполным и недопустимым, а метод создает IOException исключение.
Применяется к
CreateFromDirectory(String, Stream, CompressionLevel, Boolean)
Создает ZIP-архив в указанном потоке, который содержит файлы и каталоги из указанного каталога, использует указанный уровень сжатия и при необходимости включает базовый каталог.
public: static void CreateFromDirectory(System::String ^ sourceDirectoryName, System::IO::Stream ^ destination, System::IO::Compression::CompressionLevel compressionLevel, bool includeBaseDirectory);
public static void CreateFromDirectory (string sourceDirectoryName, System.IO.Stream destination, System.IO.Compression.CompressionLevel compressionLevel, bool includeBaseDirectory);
static member CreateFromDirectory : string * System.IO.Stream * System.IO.Compression.CompressionLevel * bool -> unit
Public Shared Sub CreateFromDirectory (sourceDirectoryName As String, destination As Stream, compressionLevel As CompressionLevel, includeBaseDirectory As Boolean)
Параметры
sourceDirectoryName String
Путь к архивируемому каталогу, заданный как относительный или абсолютный путь. Относительный путь интерпретируется относительно текущего рабочего каталога.
destination Stream
Поток, в котором хранится ZIP-архив.
compressionLevel CompressionLevel
Одно из значений перечисления, указывающее, акцентировать ли внимание на скорости или эффективности сжатия при создании записи.
includeBaseDirectory Boolean
Значение true , чтобы включить имя каталога из параметра sourceDirectoryName в корень архива; значение false , чтобы включать только содержимое этого каталога.
Исключения
sourceDirectoryName имеет значение Empty, содержит только пробел или по крайней мере один недопустимый символ.
Поток destination не поддерживает запись.
Параметр sourceDirectoryName или destination имеет значение null .
В sourceDirectoryName указанном пути имя файла или и то, и другое превышает максимальную длину, определенную системой.
Параметр sourceDirectoryName недопустим или не существует (например, он соответствует неподключенному диску).
Не удалось открыть файл в указанном каталоге.
При открытии архивного файла произошла ошибка ввода-вывода.
sourceDirectoryName содержит недопустимый формат.
compressionLevel не является допустимым значением CompressionLevel.
Комментарии
Структура каталогов из файловой системы сохраняется в архиве. Если каталог пуст, создается пустой архив. Используйте эту перегрузку метода, чтобы указать уровень сжатия и указать, следует ли включать базовый каталог в архив. Если файл в каталоге не удается добавить в архив, архив остается неполным и недопустимым, а метод создает IOException исключение.
Применяется к
CreateFromDirectory(String, String, CompressionLevel, Boolean)
Создает ZIP-архив, содержащий файлы и каталоги из указанного каталога, использует указанный уровень сжатия и необязательно включает базовый каталог.
public: static void CreateFromDirectory(System::String ^ sourceDirectoryName, System::String ^ destinationArchiveFileName, System::IO::Compression::CompressionLevel compressionLevel, bool includeBaseDirectory);
public static void CreateFromDirectory (string sourceDirectoryName, string destinationArchiveFileName, System.IO.Compression.CompressionLevel compressionLevel, bool includeBaseDirectory);
static member CreateFromDirectory : string * string * System.IO.Compression.CompressionLevel * bool -> unit
Public Shared Sub CreateFromDirectory (sourceDirectoryName As String, destinationArchiveFileName As String, compressionLevel As CompressionLevel, includeBaseDirectory As Boolean)
Параметры
sourceDirectoryName String
Путь к архивируемому каталогу, заданный как относительный или абсолютный путь. Относительный путь интерпретируется относительно текущего рабочего каталога.
destinationArchiveFileName String
Путь создаваемого архива, заданный как относительный или абсолютный путь. Относительный путь интерпретируется относительно текущего рабочего каталога.
compressionLevel CompressionLevel
Одно из значений перечисления, указывающее, акцентировать ли внимание на скорости или эффективности сжатия при создании записи.
includeBaseDirectory Boolean
Значение true , чтобы включить имя каталога из параметра sourceDirectoryName в корень архива; значение false , чтобы включать только содержимое этого каталога.
Исключения
Параметр sourceDirectoryName или destinationArchiveFileName является Empty, содержит только пробелы или хотя бы один недопустимый символ.
Параметр sourceDirectoryName или destinationArchiveFileName имеет значение null .
В sourceDirectoryName или destinationArchiveFileName длина указанного пути, имени файла или обоих параметров превышает установленное в системе максимальное значение.
Параметр sourceDirectoryName недопустим или не существует (например, он соответствует неподключенному диску).
destinationArchiveFileName уже существует.
Не удалось открыть файл в указанном каталоге.
При открытии архивного файла произошла ошибка ввода-вывода.
Параметр destinationArchiveFileName задает каталог.
Вызывающий код не имеет необходимого разрешения на доступ к каталогу, указанному в sourceDirectoryName , или к файлу, указанному в destinationArchiveFileName .
sourceDirectoryName или destinationArchiveFileName содержит недопустимый формат.
ZIP-архив не поддерживает запись.
Примеры
В этом примере показано, как создать и извлечь ZIP-архив с помощью ZipFile класса . Он сжимает содержимое папки в ZIP-архив, а затем извлекает это содержимое в новую папку. При сжатии архива включается базовый каталог и устанавливается уровень сжатия, чтобы повысить скорость операции, а не эффективность. Чтобы использовать класс ZipFile, укажите в проекте ссылку на сборку System.IO.Compression.FileSystem .
using System; using System.IO; using System.IO.Compression; namespace ConsoleApplication < class Program < static void Main(string[] args) < string startPath = @"c:\example\start"; string zipPath = @"c:\example\result.zip"; string extractPath = @"c:\example\extract"; ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest, true); ZipFile.ExtractToDirectory(zipPath, extractPath); >> >
open System.IO.Compression let startPath = @"c:\example\start" let zipPath = @"c:\example\result.zip" let extractPath = @"c:\example\extract" ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest, true) ZipFile.ExtractToDirectory(zipPath, extractPath)
Imports System.IO Imports System.IO.Compression Module Module1 Sub Main() Dim startPath As String = "c:\example\start" Dim zipPath As String = "c:\example\result.zip" Dim extractPath As String = "c:\example\extract" ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest, True) ZipFile.ExtractToDirectory(zipPath, extractPath) End Sub End Module
Комментарии
Структура каталогов из файловой системы сохраняется в архиве. Если каталог пуст, создается пустой архив. Используйте эту перегрузку метода, чтобы указать уровень сжатия и указать, следует ли включать базовый каталог в архив.
Если архив уже существует, IOException создается исключение. Если запись с указанным именем уже существует в архиве, создается вторая запись с идентичным именем.
Если файл в каталоге не удается добавить в архив, архив остается неполным и недопустимым, а метод создает IOException исключение.
Архивирование и распаковка ZIP архивов в PowerShell

03.05.2021

itpro

PowerShell, Windows 10, Windows Server 2016

комментариев 10
Вы можете использовать возможности PowerShell для создания zip архивов и их распаковки. В версии PowerShell 5.0 (установлен по умолчанию в Windows 10) доступен отдельный модуль Microsoft.PowerShell.Archive. В более старых версиях Windows для архивирования можно использовать класс ZipFile из .NET Framework
В модуле Microsoft.PowerShell.Archive (C:\Windows\System32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive) есть всего два командлета:
Get-Command -Module Microsoft.PowerShell.Archive | Format-Table -AutoSize;
CommandType Name Version Source ----------- ---- ------- ------ Function Compress-Archive 1.0.0.0 Microsoft.PowerShell.Archive Function Expand-Archive 1.0.0.0 Microsoft.PowerShell.Archive

Рассмотрим примеры использования этих командлетов для создания и распаковки ZIP архивов в ваших PowerShell скриптах.
Как создать ZIP архив в PowerShell с помощью Compress-Archive?
Команда Compress-Archive имеет следующий синтаксис:
Compress-Archive [-Path] String[] [-DestinationPath] String [-CompressionLevel String ] [-Update]
- В параметре Path задаются путь к файлам или каталогам, которые нужно заархивировать;
- DestinationPath – указывает местоположение создаваемого ZIP файла;
- CompressionLevel – задает уровень сжатия (NoCompression, Optimal или Fastest);
- Update — позволяет добавить/обновить файлы в уже существующем ZIP архиве;
- Force — если архив с указанным именем уже существует, он будет перезаписан.
Совет. Уровень сжатия NoCompression, как правило, стоит использовать при объединении в единый ZIP файл уже сжатых файлов (jpg, msi, mp3 и пр.). В этом случае, Windows не будет тратить время на их сжатие.
Чтобы заархивировать один файл, выполните:
Compress-Archive -Path «C:\Logs\WindowsUpdate.log» -DestinationPath C:\Archive\updatelog.zip -CompressionLevel Optimal

Можно заархивировать все содержимое нескольких каталогов (все файлы и подкаталоги):
Compress-Archive -Path C:\Logs\,C:\Logs2\ -DestinationPath C:\Archive\logs-all.zip -CompressionLevel Optimal
Чтобы добавить в архив несколько файлов или папок, их имена нужно разделить запятыми.
Можно добавить в ZIP архив только файлы с определенной маской. Например, следующая команда запакует только файлы с расширением *.txt.
Compress-Archive -Path C:\Logs\*.txt -DestinationPath C:\Archive\logs-txt.zip –CompressionLevel Fastest
С помощью Get-ChildItem можно использовать более сложные фильтры. Например, следующий скрипт позволит найти на диске топ 10 самых больших файлов с расширением *.docx или *.xlsx и добавит их в архив:
Get-ChildItem c:\docs -Include *.xlsx –Recurse| sort -descending -property length | select -first 10 |Compress-Archive -DestinationPath C:\temp\officefiles.zip
Чтобы добавить в существующий zip архив новые файлы, используйте ключ Update:
Compress-Archive -Path C:\Logs\,C:\logs2\ –Update -DestinationPath C:\Archive\logs-txt.zip
Примечание. Т.к. модуль Microsoft.PowerShell.Archive использует вызовы класса System.IO.Compression.ZipArchive, не получится сжать файл, размером больше 2 Гб. При попытке сжать файл большего размера появится ошибка:

Exception calling "Write" with "3" argument(s): "Stream was too long." At C:\Windows\system32\WindowsPowerShell\v1.0\Modules\Microsoft.PowerShell.Archive\Microsoft.PowerShell.Archive.psm1:805 char:29 + . $destStream.Write($buffer, 0, $numberOfBytesRead) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : IOException
Как распаковать ZIP архив в PowerShell с Expand-Archive?
Для разархивирования ZIP файлов можно использовать командлет Expand—Archive.
Синтаксис командлета аналогичный:
Expand-Archive [-Path] String [-DestinationPath] String [-Force] [-Confirm]
Например, чтобы распаковать созданный нами ранее ZIP-архив в указанный каталог с перезаписью файлов, выполните:
Expand-Archive -Path C:\Scripts\test1.zip -DestinationPath c:\scripts -Force

Из недостатков модуля архивирования PowerShell стоит отметить:
- Нельзя просмотреть содержимое архива без его распаковки;
- Нельзя извлечь из архива часть файлов (придется распаковать архив целиком);
- Нельзя использовать другие форматы архивов, кроме zip;
- Нельзя защитить zip архив с паролем.
В более сложных случаях для выполнения архивации в ваших PowerShell скриптах нужно использовать сторонние утилиты. Например, 7zip или модуль 7Zip4Powershell. Например, следующая команда позволит распаковать zip файл, защищенный паролем:
Install-Module -Name 7Zip4Powershell
Expand-7Zip -ArchiveFileName C:\PS\Logs.zip -Password «P@$$dr0w» -TargetPath C:\Temp\NewLogs
Архивирование в PowerShell с помощью класса ZipFile
Сначала загрузите класс в свою сессию PowerShell:
Add-Type -AssemblyName «System.IO.Compression.FileSystem»
Чтобы заархивировать каталог, используйте такой скрипт:
$SourceFolder = ‘C:\Logs’
$ZipFileName = ‘C:\PS\logs.zip’
[IO.Compression.ZipFile]::CreateFromDirectory($SourceFolder, $ZipFileName)

Чтобы обновить ZIP архив и указать степень сжатия, используйте такой код PowerShell:
$addfile = ‘C:\temp\new.log’
$compressionLevel = [System.IO.Compression.CompressionLevel]::Fastest
$zip = [System.IO.Compression.ZipFile]::Open($zipFileName, ‘update’)[System.IO.Compression.ZipFileExtensions]::CreateEntryFromFile($zip, $addfile, (Split-Path $addfile -Leaf), $compressionLevel)$zip.Dispose()
Команда $zip.Dispose() используется чтобы закрыть zip файл.
Можно вывести содержимое ZIP архива:

Или можно вывести содержимое zip архива в виде таблицы Out-GridView с указанием степени сжатия:

Для разархивирования ZIP архива в каталог C:\Logs, используйте следующие команды:
Предыдущая статья Следующая статья
Читайте далее в разделе PowerShell Windows 10 Windows Server 2016



Get-ADUser: получение информации о пользователях Active Directory из PowerShell
Внедряем User Profile Disks в Windows Server RDS
Отправка писем из Outlook с помощью VBA макроса или PowerShell
Get-ADComputer: получить информацию о компьютерах Active Directory через PowerShell