.NETでZIPからJP2コンテンツを抽出
Aspose.ZIP for .NETを使用すると、ZIPアーカイブを開き、エントリを調べ、C#アプリケーションに必要なJP2ファイルだけを復元できます。このページでの抽出とは、ZIPコンテナー内に保存された.jp2拡張子の項目を見つけ、管理された出力先に保存することを意味します。Aspose.ZIPはアーカイブ内のファイルを復元しますが、ファイル内部の内容を解析または変換するものではありません。
選択的な抽出は、画像アップロード、グラフィックアセットパッケージ、医療または技術画像、ビジュアルアセット処理で役立ちます。アプリケーションは不要なエントリを無視し、名前とサイズを確認し、パッケージ全体を展開せずに承認済みファイルだけを次の処理へ渡せます。
C#でZIPからJP2ファイルを抽出する方法
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を列挙し、拡張子が.jp2の非ディレクトリエントリを選択して、承認された各出力先にArchiveEntry.Extractを呼び出します。この例では最終ファイル名のみを使用するため、アーカイブ内のパスが出力フォルダーの外へ書き込むことはありません。
C#でJP2ファイルを抽出する手順
- ソースZIPパスを決定し、分離された出力ディレクトリを作成します。
Archiveクラスでパッケージを開きます。- パッケージ全体をすぐに展開せず、
Archive.Entriesを列挙します。 - ディレクトリをスキップし、拡張子
.jp2のファイル名だけを選択します。 - 承認された出力ルート内に収まる宛先パスを作成します。
- 設定された展開後サイズ制限を超えるエントリを拒否します。
- 承認された各エントリを
ArchiveEntry.Extractで保存します。
システム要件
例を実行する前に、環境に次のものが含まれていることを確認してください:
- Windows、Linux、macOS上のサポート対象.NETランタイム。
- Visual Studio、JetBrains Rider、Visual Studio Code、またはその他のC#開発環境。
- NuGetでインストール済み、またはアセンブリとして参照されたAspose.ZIP for .NET。
- ソースZIPへの読み取り権限と、出力ディレクトリへの書き込み権限。
- 信頼できないアーカイブ向けのサイズ、実行時間、一時ストレージの明確な制限。
C#例: ZIPから選択したJP2ファイルを抽出
このコードはZIPパッケージを開き、ディレクトリを除外し、許可された拡張子でエントリをフィルターして、一致するファイルを1つの出力ディレクトリへ書き込みます。アーカイブ内のパスを破棄することで、親ディレクトリセグメントが出力先を制御することを防ぎます。本番コードでは、重複ファイル名に対する決定的なルールも定義してください。
ZIPからJP2ファイルを抽出 - C#
using Aspose.Zip;
using System;
using System.IO;
string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-jp2");
string[] allowedExtensions = { ".jp2" };
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);
}
}
JP2ファイル抽出の実装メモ
拡張子によるフィルターは候補ファイルを識別するだけで、内容が有効または安全であることを保証しません。寸法、カラープロファイル、メタデータ、DICOMフィールド、ベクター内容は、対応する画像処理コンポーネントで確認してください。
この例では、アーカイブ内のパスを意図的に平坦化しています。承認された2つのエントリが同じ最終ファイル名を持つ場合、ArchiveEntry.Extractは既存ファイルを上書きする可能性があります。抽出前に、重複を拒否する、一意の名前を生成する、検証済みの相対フォルダー構造を保持する、などのポリシーを定義してください。並列処理の出力が混在しないよう、ジョブごとに個別の出力先を使用します。
セキュリティとプライバシー
アップロードされたZIP、エントリ名、内容は信頼できない入力として扱ってください。ArchiveEntry.Nameを出力ディレクトリに直接結合しないでください。エントリには絶対パスや親ディレクトリへ戻るセグメントが含まれる場合があります。この例ではPath.GetFileNameを使用します。フォルダーを保持する場合は、最終パスを解決し、承認済みルート内に残ることを確認してください。
圧縮サイズ、エントリごとおよび合計の展開後サイズ、エントリ数、処理時間、並列ジョブ数を制限します。権限を制限した一時ストレージを使用し、失敗後は部分的な出力を削除し、パスワード、非公開ファイル名、抽出内容をログに記録しないでください。
JP2ファイル抽出FAQ
C#でZIPアーカイブからJP2ファイルだけを抽出するには?
ArchiveでZIPを開き、Archive.Entriesを列挙し、非ディレクトリエントリを.jp2拡張子でフィルターして、検証済みの各出力パスにExtractを呼び出します。
Aspose.ZIPは抽出したJP2ファイルの内容を検証しますか?
いいえ。Aspose.ZIPはアーカイブ内に保存されたファイルを復元します。内容の読み取り、検証、変換は、その形式に対応した専用コンポーネントの役割です。
同じ選択パターンを7Z、RAR、TARコンテナーにも使えますか?
考え方は同じですが、各コンテナーは対応するAspose.ZIPアーカイブクラスで開く必要があります。エントリ型や利用できる抽出操作は形式によって異なります。
重複するJP2ファイル名はどう処理すべきですか?
抽出前にルールを決めてください。重複を拒否する、一意の名前を生成する、検証済みの相対フォルダー構造を保持する、などが一般的です。
関連する画像抽出ガイド
ZIPパッケージに含まれることが多い画像形式やグラフィック形式のC#抽出ページを確認できます。