在 .NET 中从 ZIP 提取 HTML 内容
使用 Aspose.ZIP for .NET 检查 ZIP 存档,并仅还原 C# 应用程序所需的 HTML 文件。在本页中,提取是指从 ZIP 容器中选择 .html 文件并将其写入受控目标位置;Aspose.ZIP 不会解释或转换文件的内部内容。
选择性提取适用于文档导入、媒体资产、工程数据、项目包和自动化内容处理。应用程序可以跳过无关条目,执行输出和资源策略,并在不展开完整存档的情况下将已批准的文件传递给下一阶段。
如何使用 C# 从 ZIP 提取 HTML 文件
安装 Aspose.ZIP for .NET 包 并导入 Aspose.Zip 命名空间。在写入任何内容之前即可获取存档元数据,因此应用程序可以将 ArchiveEntry.Name、ArchiveEntry.IsDirectory 和 ArchiveEntry.UncompressedSize 作为验收策略的一部分进行评估。
Package Manager Console Command
PM> Install-Package Aspose.Zip
使用 Archive 打开 ZIP,枚举 Archive.Entries,选择扩展名为 .html 的条目,并对每个已批准的目标调用 ArchiveEntry.Extract。示例会将存档路径缩减为最终文件名,使条目无法逃离目标目录。
在 C# 中还原 HTML 文件的步骤
- 解析源 ZIP 路径并创建隔离的输出目录。
- 使用 Archive 类打开包。
- 枚举 Archive.Entries,而不是展开每个项目。
- 选择最终文件名使用 .html 扩展名的条目。
- 构建始终位于已批准输出根目录下的目标路径。
- 拒绝超过配置的解压后大小限制的条目。
- 使用 ArchiveEntry.Extract 保存每个已接受的项目。
系统要求
运行示例之前,请确保环境包含:
- Windows、Linux 或 macOS 上受支持的 .NET 运行时。
- Visual Studio、JetBrains Rider、Visual Studio Code 或其他 C# 开发环境。
- 通过 NuGet 安装或作为程序集引用的 Aspose.ZIP for .NET。
- 对源存档的读取权限以及对目标目录的写入权限。
- 适合不受信任压缩输入的存储和执行限制。
C# 示例:选择 ZIP 存档中的 HTML 文件
代码打开一个 ZIP 包,按已批准的扩展名筛选非目录条目,并将匹配文件写入一个输出目录。将存档路径扁平化可使示例保持紧凑,并防止父目录片段控制目标位置。生产代码还应为重复的输出名称定义确定性策略。
从 ZIP 提取 HTML 文件 - C#
using Aspose.Zip;
using System;
using System.IO;
string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-html");
string[] allowedExtensions = { ".html" };
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);
}
}
HTML 文件的实现说明
匹配的扩展名只能识别候选文件;它不能证明内容可读、有效或安全。在预览、转换或进一步处理之前,请使用理解 HTML 格式的组件验证已提取的文件。该示例会扁平化普通文件的存档路径。如果两个已接受条目具有相同的最终名称,ArchiveEntry.Extract 可能会覆盖现有输出,因此应选择明确的冲突策略:拒绝重复项、生成唯一名称,或保留经过验证的相对目录树。为每个作业使用单独的目标位置,以免并发请求混合结果。
安全和隐私注意事项
请将存档名称和载荷视为不受信任。切勿将 ArchiveEntry.Name 直接追加到目标路径,因为绝对路径和父目录片段可能写入预期文件夹之外。标准示例使用 Path.GetFileName;需要保留目录的工作流必须解析完整路径,并验证其仍位于已批准的根目录之下。为压缩输入大小、单个条目和总解压大小、条目数量、处理时间以及并发作业设置限制。提取到受限的临时存储中,失败后清理部分输出,在应用程序需要时扫描文件,并避免记录私有文件名或文档内容。
HTML 提取常见问题
如何在 C# 中只从 ZIP 存档提取 HTML 文件?
使用 Archive 打开 ZIP,枚举 Archive.Entries,匹配 .html 扩展名,并对每个已接受的目标路径调用 Extract。
Aspose.ZIP 会验证已提取 HTML 文件的内容吗?
不会。扩展名只是第一步筛选。请使用理解 HTML 内容的组件验证已还原的文件。
同样的选择模式可以用于 7Z、RAR 或 TAR 容器吗?
可以,但需要使用相应的 Aspose.ZIP 存档类打开每种容器。不同存档格式的条目类型和可用提取方法可能不同。
应如何处理重复的 HTML 文件名?
在提取之前选择规则:拒绝重复项、生成唯一名称,或保留经过验证的相对目录结构。
相关文件提取指南
浏览常见于 ZIP 包中的文件和资产的 C# 提取页面。