問題タブ [zip4j]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Zip4J API を使用して、指定されたファイル権限でストリーミング データを追加する方法
Zip4J API は、ストリーミングされたエントリを zip ファイルに追加するための便利な方法を提供します。
ZipFile または ZipParameter クラスのいずれかのインスタンスで「ファイル許可」または「デフォルトのファイル許可」を指定する方法はないようです。
デフォルトの動作では、エントリですべてのファイル プロパティが false に設定されます。これは、UNIX システムでは、所有者、グループ、およびその他の読み取り、書き込み、または実行のアクセス許可がないことを意味します。これは不便です。少なくとも所有者の読み取り許可フラグを設定したいと思います。
「ストリーミングされた」zip ファイル エントリ (つまり、ZipFile.addStream メソッドを使用して追加されたもの) にファイル アクセス許可を設定する手段はありますか?
そうでない場合 (1) エントリが作成された後にファイル許可を追加する手段はありますか (これは実際にはディスク上の基盤となる zip ファイルに保存されます - この警告の追加情報を参照してください)。
追加情報
ストリーム エントリが Zip ファイルに追加されると、ZipFile.getHeader(entryName) メソッドを使用して取得できるヘッダー データからファイル プロパティ情報を取得および設定できることに注意してください。ただし、この API を使用してファイル許可値を設定しても、基盤となる zip ファイルには直接影響しません。さらに、更新されたヘッダー情報をディスクに保存する方法はないようです (ただし、何かが欠けている可能性があります)。
参考までに、ファイル属性を取得および設定する方法は次のとおりです。
zip4j コードを掘り下げると、これらのファイル属性が 4 バイト配列に格納されていることがわかります。ここで、バイト 2 と 3 (バイト 0 から始まる) のビットは UNIX ファイル許可ビットを表します。これは、net.lingala.zip4j.util.FileUtils クラスの apply posix ファイル属性にあります。
潜在的な回避策(回避しようとしています)
私が見ることができる1つの回避策は、ストリームから一時ファイルにデータを書き込み、ファイルに必要な権限があることを確認し、ファイルをzipアーカイブに追加してから、一時ファイルを削除することです(目的を果たしたので)。このアプローチは、「posix システム」の場合、ディスク上のファイルのパーミッションが正しく維持されていることを前提としています。
私はこのアプローチを使用しないことを好みます。