Извлечение содержимого PSD из ZIP в .NET

Используйте Aspose.ZIP for .NET, чтобы открыть ZIP-архив, проверить его записи и восстановить только PSD-файлы, необходимые C#-приложению. На этой странице извлечение означает поиск элементов с расширением .psd внутри ZIP-контейнера и запись в контролируемое место назначения. Aspose.ZIP восстанавливает файл из архива, но не интерпретирует и не конвертирует его внутреннее содержимое.

Выборочное извлечение полезно для загрузки изображений, графических пакетов, медицинских или технических изображений и обработки визуальных ресурсов. Приложение может пропускать нерелевантные записи, проверять имена и размеры и передавать утвержденные файлы на следующий этап без распаковки всего пакета.

Как извлечь PSD-файлы из ZIP с помощью C#

Установите пакет Aspose.ZIP for .NET и подключите пространство имен Aspose.Zip. Метаданные архива доступны до записи, поэтому приложение может проверить ArchiveEntry.Name, ArchiveEntry.IsDirectory и ArchiveEntry.UncompressedSize перед сохранением изображения.


Package Manager Console Command

PM> Install-Package Aspose.Zip

После установки откройте ZIP через Archive, переберите Archive.Entries, выберите записи не-каталоги с расширением .psd и вызовите ArchiveEntry.Extract для каждого утвержденного назначения. Пример использует только конечное имя файла, поэтому пути из архива не могут записывать вне целевой папки.

Шаги извлечения файлов PSD в C#

  • Определите путь исходного ZIP и создайте изолированный выходной каталог.
  • Откройте пакет классом Archive.
  • Переберите Archive.Entries вместо немедленной распаковки всего пакета.
  • Пропустите каталоги и выберите имена файлов с расширением .psd.
  • Создайте путь назначения, который остается внутри утвержденного выходного корня.
  • Отклоните записи, превышающие заданный лимит размера после распаковки.
  • Сохраните каждую утвержденную запись через ArchiveEntry.Extract.

Системные требования

  • Поддерживаемая среда выполнения .NET в Windows, Linux или macOS.
  • Visual Studio, JetBrains Rider, Visual Studio Code или другая среда разработки C#.
  • Aspose.ZIP for .NET, установленный через NuGet или подключенный как сборка.
  • Доступ на чтение к исходному ZIP и доступ на запись к каталогу назначения.
  • Четкие лимиты размера, времени выполнения и временного хранилища для недоверенных архивов.

Пример C#: извлечение выбранных файлов PSD из ZIP

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

Извлечение файлов PSD из ZIP - C#

using Aspose.Zip;
using System;
using System.IO;

string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-psd");
string[] allowedExtensions = { ".psd" };
const ulong MaxEntrySize = 100UL * 1024 * 1024;

Directory.CreateDirectory(outputDirectory);

using (var archive = new Archive(archivePath))
{
    foreach (ArchiveEntry entry in archive.Entries)
    {
        if (entry.IsDirectory) continue;

        string fileName = Path.GetFileName(entry.Name);
        if (string.IsNullOrWhiteSpace(fileName)) continue;

        string extension = Path.GetExtension(fileName);
        if (!Array.Exists(
            allowedExtensions,
            value => string.Equals(value, extension, StringComparison.OrdinalIgnoreCase)))
        {
            continue;
        }

        if (entry.UncompressedSize > MaxEntrySize)
        {
            throw new InvalidDataException(
                $"Запись '{fileName}' превышает лимит извлечения 100 MB.");
        }

        string destinationPath = Path.Combine(outputDirectory, fileName);
        entry.Extract(destinationPath);
    }
}

Заметки по реализации для файлов PSD

Фильтрация по расширению только определяет файлы-кандидаты; она не доказывает, что содержимое корректно или безопасно. Размеры, цветовые профили, метаданные, поля DICOM или векторное содержимое проверяйте подходящим компонентом обработки изображений.

Пример намеренно уплощает пути из архива. Если две утвержденные записи имеют одинаковое конечное имя файла, ArchiveEntry.Extract может перезаписать существующий файл. Определите политику до извлечения: отклонять дубликаты, создавать уникальные имена или сохранять проверенную относительную структуру папок.

Безопасность и конфиденциальность

Загруженный ZIP, имена записей и содержимое рассматривайте как недоверенный ввод. Не объединяйте ArchiveEntry.Name напрямую с выходным каталогом: запись может содержать абсолютный путь или сегменты перехода к родительским каталогам. Пример использует Path.GetFileName; если нужно сохранить папки, разрешите итоговый путь и убедитесь, что он остается внутри утвержденного корня.

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

FAQ по извлечению файлов PSD

Как извлечь только файлы PSD из ZIP-архива в C#?

Откройте ZIP классом Archive, переберите Archive.Entries, отфильтруйте записи не-каталоги по расширению .psd и вызовите Extract для каждого проверенного выходного пути.

Проверяет ли Aspose.ZIP внутреннее содержимое файла PSD?

Нет. Aspose.ZIP восстанавливает файл, сохраненный в архиве. Чтение, проверка или конвертация содержимого относятся к компоненту, который поддерживает этот формат.

Можно ли использовать тот же шаблон выбора для 7Z, RAR или TAR?

Идея та же, но каждый контейнер нужно открывать соответствующим архивным классом Aspose.ZIP. Типы записей и операции извлечения могут различаться.

Как обрабатывать повторяющиеся имена файлов PSD?

Определите правило до извлечения: отклонять дубликаты, создавать уникальные имена или сохранять проверенную относительную структуру папок.