Extrair conteúdo PSD de ZIP no .NET
Utilize Aspose.ZIP for .NET para abrir um arquivo ZIP, inspecionar suas entradas e restaurar somente arquivos PSD necessários à aplicação C#. Nesta página, extração significa localizar itens com extensão .psd dentro do contêiner ZIP e gravá-los em um destino controlado. Aspose.ZIP restaura o arquivo armazenado no arquivo compactado; ele não interpreta nem converte o conteúdo interno.
A extração seletiva é útil para uploads de imagem, pacotes gráficos, materiais médicos ou técnicos e processamento de ativos visuais. A aplicação pode ignorar entradas irrelevantes, verificar nomes e tamanhos e encaminhar os arquivos aprovados para a próxima etapa sem descompactar todo o pacote.
Como extrair arquivos PSD de ZIP com C#
Instale o
pacote Aspose.ZIP for .NET
e importe o namespace Aspose.Zip. Os metadados do arquivo ficam disponíveis antes da gravação, permitindo verificar ArchiveEntry.Name, ArchiveEntry.IsDirectory e ArchiveEntry.UncompressedSize antes de salvar arquivos de imagem.
Package Manager Console Command
PM> Install-Package Aspose.Zip
Após a instalação, abra o ZIP com Archive, percorra Archive.Entries, selecione entradas que não sejam diretórios e tenham extensão .psd, e chame ArchiveEntry.Extract para cada destino aprovado. O exemplo usa apenas o nome final do arquivo, portanto caminhos armazenados no arquivo compactado não podem escrever fora da pasta de destino.
Etapas para extrair arquivos PSD em C#
- Defina o caminho do ZIP de origem e crie um diretório de saída isolado.
- Abra o pacote com a classe
Archive. - Percorra
Archive.Entriesem vez de extrair o pacote inteiro imediatamente. - Ignore diretórios e selecione nomes de arquivo com a extensão
.psd. - Crie um caminho de destino que permaneça dentro da raiz de saída aprovada.
- Rejeite entradas que excedam o limite configurado de tamanho extraído.
- Salve cada entrada aprovada com
ArchiveEntry.Extract.
Requisitos do sistema
- A supported .NET runtime on Windows, Linux, or macOS.
- Visual Studio, JetBrains Rider, Visual Studio Code, or another C# development environment.
- Aspose.ZIP for .NET installed through NuGet or referenced as an assembly.
- Read access to the source ZIP and write access to the destination directory.
- Clear size, execution-time, and temporary-storage limits for untrusted archives.
Exemplo em C#: extrair arquivos PSD selecionados de ZIP
O código abre um pacote ZIP, ignora diretórios, filtra entradas pela extensão permitida e grava os arquivos correspondentes em um único diretório de saída. Descartar os caminhos armazenados evita que segmentos de diretório superior controlem o destino. Em produção, defina também uma regra determinística para nomes duplicados.
Extrair arquivos PSD de 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(
$"Entry '{fileName}' exceeds the 100 MB extraction limit.");
}
string destinationPath = Path.Combine(outputDirectory, fileName);
entry.Extract(destinationPath);
}
}
Notas de implementação para arquivos PSD
Filtrar por extensão apenas identifica candidatos; isso não prova que o conteúdo seja válido ou seguro. Dimensões, perfis de cor, metadados, campos DICOM ou conteúdo vetorial devem ser verificados com um componente de imagem adequado.
The example intentionally flattens archived paths. If two approved entries have the same final file name, ArchiveEntry.Extract can overwrite an existing file. Define a policy before extraction: reject duplicates, generate unique names, or preserve a validated relative folder structure.
Segurança e privacidade
Trate o ZIP enviado, os nomes de entrada e o conteúdo como dados não confiáveis. Não combine ArchiveEntry.Name diretamente com o diretório de saída, pois uma entrada pode conter caminho absoluto ou segmentos que sobem para diretórios superiores. O exemplo usa Path.GetFileName; se precisar preservar pastas, resolva o caminho final e confirme que ele permanece dentro da raiz aprovada.
Limite tamanho compactado, tamanho extraído por entrada e total, número de entradas, tempo de processamento e jobs paralelos. Use armazenamento temporário com permissões restritas, remova resultados parciais após falhas e evite registrar senhas, nomes privados ou conteúdo extraído.
FAQ sobre extração de arquivos PSD
Como extraio somente arquivos PSD de um arquivo ZIP em C#?
Abra o ZIP com Archive, percorra Archive.Entries, filtre entradas que não sejam diretórios pela extensão .psd e chame Extract para cada caminho de saída validado.
Aspose.ZIP valida o conteúdo interno do arquivo PSD extraído?
Não. Aspose.ZIP restaura o arquivo armazenado no ZIP. Ler, validar ou converter o conteúdo é responsabilidade de um componente que ofereça suporte ao formato.
O mesmo padrão de seleção pode ser usado com contêineres 7Z, RAR ou TAR?
O conceito é o mesmo, mas cada contêiner deve ser aberto com a classe de arquivo Aspose.ZIP correspondente. Tipos de entrada e operações de extração podem variar por formato.
Como lidar com nomes duplicados de arquivos PSD?
Defina a regra antes da extração: rejeitar duplicados, gerar nomes únicos ou preservar uma estrutura relativa de pastas já validada.
Guias Relacionados para Extração de Imagens
Consulte páginas C# para formatos de imagem e gráficos armazenados em ZIP.