説明
ZIP ファイルと Java Archive (JAR) ファイルを操作します。cfzip タグを使用すると、基本的な圧縮 / 展開機能に加え、アーカイブからのエントリの削除、ファイルの抽出、バイナリ形式でのファイルの読み取り、アーカイブのコンテンツのリスト表示、実行可能 JAR ファイルで使用するエントリパスの指定などを行えます。
履歴
ColdFusion 11:password および encryptionalgorithm という 2 つの新しい属性が追加されました。
ColdFusion 8: このタグが追加されました。
カテゴリ
ファイル管理タグ
シンタックス
delete <cfzip required action = "delete" file = "absolute pathname" optional entrypath = "full pathname" filter = "file filter" recurse = "yes|no"> list <cfzip required action = "list" file = "absolute pathname" name = "recordset name" optional filter = "file filter" recurse = "yes|no" showDirectory= "yes|no"> read <cfzip required action = "read" entrypath = "full pathname" file = "absolute pathname" variable = "variable name" optional password = "password string" charset = "encoding type"> readBinary <cfzip required action = "readBinary" entrypath = "full pathname" file = "absolute pathname" variable = "variable name" optional password = "password string"> unzip <cfzip required action = "unzip" destination = "destination directory" file = "absolute pathname" optional password = "password string" entrypath = "full pathname" filter = "file filter" overwrite = "yes|no" recurse = "yes|no" storePath = "yes|no"> zip <cfzip required file = "absolute pathname" One of the following: source = "source directory" <cfzipparam source = "source directory" ...> optional encryptionAlgorithm = "standard|AES-128|AES-256" password = "password string" action = "zip" filter = "file filter" overwrite = "yes|no" prefix = "string" recurse = "yes|no" storePath = "yes|no">
|
注意:このタグの属性は attributeCollection 属性で指定でき、その値は構造体になります。attributeCollection 属性で構造体の名前を指定し、タグの属性名を構造体のキーとして使用します。
|
関連項目
cfdirectory
属性
属性
|
アクション
|
必須/オプション
|
デフォルト
|
説明
|
action
|
N/A
|
オプション
|
zip
|
実行するアクションです。次のいずれかになります。
- delete
- list
- read
- readBinary
- unzip
- zip
アクションを指定しなかった場合は、デフォルトのアクション zip が適用されます。
|
charset
|
read
|
オプション
|
ホストマシンのデフォルトのエンコード
|
ZIP または JAR エントリをテキスト文字列に変換するときに使用する文字セットです。例えば、次の文字セットを指定できます。
|
destination
|
unzip
|
必須
|
|
ZIP または JAR ファイルの展開先ディレクトリです。
|
entryPath
|
deletereadreadBinaryunzip
|
オプション
|
|
アクションを実行するパスです。
|
file
|
deletelistreadreadBinaryunzipzip
|
必須
|
|
アクションを実行する絶対パスです。例えば、ZIP ファイルのフルパスを指定します (例 : c:¥temp¥log.zip)。 フルパスを指定しなかった場合は (例 : file="log.zip")、テンポラリディレクトリにファイルが作成されます。GetTempDirectory 関数を使用して ZIP または JAR ファイルにアクセスできます。
|
filter
|
deletelistunzipzip
|
オプション
|
|
アクションに適用するファイルフィルタです。指定されたパスに存在するファイルの中で、フィルタに一致するファイルのみにアクションが適用されます。
|
name
|
list
|
必須
|
|
list アクションの結果を格納するレコードセット名です。レコードセットには次の列があります。
- name: JAR ファイルのエントリのファイル名。例えば、エントリが help/docs/index.htm の場合、名前は index.htm です。
- directory: エントリを含むディレクトリ。上の例の場合、ディレクトリは help/docs です。ディレクトリと名前を結合すると完全なエントリ名を取得できます。エントリがルートレベルにある場合、ディレクトリは空(" ")です。
- size: 展開後のエントリのサイズ (単位 : バイト)。
- compressedSize: 圧縮後のエントリのサイズ (単位 : バイト)。
- type: エントリのタイプ (ディレクトリまたはファイル)。
- dateLastModified: エントリの最終修正日 (cfdate オブジェクト)。
- comment: エントリに関するコメント (存在する場合)。
- crc: 展開後のエントリデータの Crc-32 チェックサム。
|
overwrite
|
unzipzip
|
オプション
|
no
|
unzip: 展開したファイルを上書きするかどうかを指定します。
- yes: 指定された展開先に同じ名前のファイルが存在する場合、ファイルは上書きされます。
- no: 指定された展開先に同じ名前のファイルが存在する場合、ファイルは上書きされず、そのエントリは展開されません。残りのエントリは展開されます。
zip: ZIP または JAR ファイルのコンテンツを上書きするかどうかを指定します。
- yes: 存在する場合は、ZIP または JAR ファイルのすべてのコンテンツを上書きします。
- no: 存在する場合は、既存のエントリを更新して、新しいエントリを ZIP または JAR ファイルに追加します。
|
prefix
|
zip
|
オプション
|
|
ZIP または JAR エントリに接頭辞として追加する文字列です。この文字列は、エントリを追加するサブディレクトリの名前です。
|
recurse
|
deletelistunzipzip
|
オプション
|
yes
|
アクションをサブディレクトリに適用するかどうかを指定します。
- yes: サブディレクトリを対象に含めます。
- no: サブディレクトリを対象に含めません。
|
showDirectory
|
list
|
オプション
|
no
|
ディレクトリ構造を表示するかどうかを指定します。
- yes: ディレクトリをリスト表示します。
- no: ディレクトリをリスト表示しません。
|
source
|
zip
|
必須 (「説明」を参照)。
|
|
圧縮するソースディレクトリです。cfzipparam タグが指定されている場合は不要です。
|
storePath
|
unzipzip
|
オプション
|
yes
|
unzip: ファイルをエントリパスに展開するかどうかを指定します。
- yes: ファイルはエントリパスに展開されます。
- no: エントリパスは無視され、すべてのファイルがルートレベルに展開されます。
zip: ZIP または JAR ファイル内でパス名を保持するかどうかを指定します。
- yes: ZIP または JAR ファイル内でエントリのパス名が保持されます。
- no: ZIP または JAR ファイル内でエントリのパス名は保持されません。すべてのファイルがルートレベルに配置されます。同じ名前のファイルが存在する場合は、それらの中で最後のファイルが追加されます。
|
variable
|
readreadBinary
|
必須
|
|
コンテンツが格納される変数です。
|
password |
zip |
オプション |
|
アーカイブに使用するパスワードです。 |
encryptionAlgorithm |
zip |
オプション |
|
圧縮に使用する暗号化アルゴリズムです。使用できるオプションは次のとおりです。
CFZip タグに属性が指定されている場合、CFZipparam タグの対応する属性によってそれらの属性を継承またはオーバーライドできます。
パスワードのみが指定されている場合のデフォルトの encryptionAlgorithm は AES 256 ビットです。 ディレクトリとともに使用した場合、そのディレクトリ内のすべてのファイルが同じパスワードと暗号化によって保護されます。 |
使用方法
cfzip タグを使用すると、ファイルの圧縮 / 展開を実行したり、ColdFusion 内の既存の ZIP または JAR ファイルを操作できます。cfzip タグは単独で使用することもできますが、cfzipparam タグと組み合わせて複数のファイルまたはディレクトリを操作することもできます。 cfzip タグは、cfzipparam タグの親タグです。
ZIP 形式は、ファイルのアーカイブや圧縮に使用される標準形式です。JAR 形式は ZIP 形式をベースとしています。JAR ファイルはプラットフォームに依存しません。
注意:cfzip タグは、ディレクトリを作成しません。存在しないディレクトリを指定した場合も、エラーは生成されません。
|
次のシンタックスを使用して、パスを取る任意の属性でメモリ内のファイルまたはディレクトリを指定します。メモリ内のファイルはディスクに書き込まれないため、一時的データの処理が早くなります。
ファイルパスには、複数のディレクトリを含めることができます (例 : ram:///petStore/images/dogImages.zip)。ファイルを指定する前に、パスのディレクトリを作成しておく必要があります。メモリ内のファイルの使用方法の詳細については、『ColdFusion アプリケーションの開発』の「ColdFusion アプリケーションの最適化」の「メモリ内ファイルの使用」を参照してください。
delete アクション
ZIP または JAR ファイルからエントリを削除するには、delete アクションを使用します。
<!--- This example shows how to delete all the properties in a JAR file. ---> <cfzip file="e:\work\soure.jar" action="delete" filter="*.properties, *.props"> <!--- This example shows how to delete all of the entries in a ZIP file with a JPG, GIF, or PNG extension, including entries in subdirectories. ---> <cfzip file="c:\myApp\images.zip" action="delete" filter="*.jpg, *.gif, *.png" recurse="yes"> <!--- This example shows how to delete the "images" subdirectory (and its contents) from the "myApp.zip" file. ---> <cfzip action="delete" file="c:\myApp.zip" entrypath="images"> <!--- This example shows how to delete all Java source entries in the "work/source" directory and images (*.gif, *.jpg, *.jpeg) from a JAR file. ---> <cfzip file="C:¥downloads¥source.jar" action="delete"> <cfzipparam entrypath="work/source" filter="*.java"> <cfzipparam filter="*.gif,*.jpg,*.jpeg"> </cfzip>
|
list アクション
ZIP または JAR ファイルのエントリをリスト表示するには、list アクションを使用します。次の表に、アーカイブ内のエントリに関して取得できる情報の種類を示します。
フィールド
|
説明
|
comment
|
エントリソースとともに保存されたテキスト文字列の説明です。
|
compressedSize
|
圧縮後のエントリのサイズです (単位 : バイト)。
|
crc
|
エントリソースのチェックサムです。
|
dateLastModified
|
ソースが最後に修正された日付と時刻です。
|
directory
|
エントリが保存されているディレクトリの名前です。
|
name
|
エントリのパス名です。
|
size
|
展開後のエントリソースのサイズです (単位 : バイト)。
|
type、
|
エントリソースのタイプです (file など)。
|
cfdump タグを使用すると、ZIP または JAR ファイル内のすべての情報をリスト表示できます。次の例を参照してください。
<cfzip file="c:/myApp.jar" action="list" name="entry"> <cfdump var="#entry#">
|
cfoutput タグを使用すると、アーカイブ内のエントリの個々のフィールドをリスト表示できます。次の例を参照してください。
<cfzip file="c:¥zipTest¥Test.zip" action="list" name="entry"> <table> <cfoutput> <tr> <td><b>Entry Name:</b> #entry.name#</td> <td><b>Last Modified Date:</b> #dateFormat(entry.dateLastModified)#,#timeFormat(entry.dateLastModified)#</td> <td><b>Size (uncompressed):</b> #numberFormat(entry.size/1000)# KB <br></td> </cfoutput> </tr> </table>
|
read アクション
ZIP または JAR ファイルのエントリのコンテンツを人間が読み取れる形式で読み込むには、read アクションを使用します。read アクションでは、charset の値を使用して文字列が作成されます。
<!--- This example shows how to read a text file in a JAR file. ---> <cfzip action="read" file="/home/sam/work/util.jar" entrypath="info.txt" variable="text">
|
readBinary アクション
ZIP または JAR ファイルのコンテンツをバイナリ形式で読み込むには、readBinary アクションを使用します。
<!--- This example shows how to use the readBinary action to copy a ZIP entry from one ZIP file to another ZIP file. ---> <cfzip file="c:¥work¥instr.zip" action="readBinary" entryPath="com/test/abc.jpg" variable="xyz"> <cfzip file="c:¥work¥copy_instr.zip"> <cfzipparam entryPath="com/test/xyz.jpg" content="#xyz#"> </cfzip>
|
unzip アクション
ZIP または JAR ファイルからエントリを展開するには、unzip アクションを使用します。
<!--- This example shows how to extract the class files of a JAR file and save the files to a local drive. ---> <cfzip file="e:\work\tools.jar" action="unzip" filter="*.class" destination="c:\temp\tools\classes"/> <!--- This example shows how to extract files from a JAR file in multiple directories. ---> <cfzip file="e:¥work¥images.jar" action="unzip" destination="c:¥images"> <cfzipparam entryPath="toWork¥small"> <cfzipparam entryPath="final¥large"> </cfzip>
|
zip アクション
ZIP または JAR ファイルを作成または更新するには、zip アクションを使用します。これはデフォルトのアクションです。明示的に指定する必要はありません。存在しない ZIP または JAR ファイルを指定すると、ColdFusion はそのファイルを作成します。既存の ZIP または JAR ファイルがある場合、ColdFusion はソースから新規のエントリを追加し、変更されている場合は既存のエントリを更新します。overwrite 属性を yes に設定した場合は、ZIP または JAR ファイル内のすべてのエントリが新しいコンテンツで上書きされます。
<!--- This example shows how to zip the directory "c:\temp" into the ZIP file "e:\work\abc.zip". ---> <cfzip file="e:\work\abc.zip" source="c:\temp"> <!--- This example shows how to zip all the class files in a directory and add a subdirectory named "classes" to the JAR file entry name. ---> <cfzip file="e:\work\util.jar" action="zip" source="c:\src\util\" prefix="classes" filter="*.class"> <!---This example shows how to zip all of the log files in the ColdFusion directory and create a subdirectory called exception where zipped files are archived. <cfzip file="c:\zipTest\log2.zip" action="zip" source="c:\ColdFusion\" prefix="exception" filter="*.log"> <!--- This example shows how to overwrite all of the content of a ZIP file with the entries specified in the source. ---> <cfzip file="c:\currentApp.zip" source="c:\myApp\work" overwrite="yes">
|
例
次の例は、フォームから選択されたイメージファイルを ZIP 形式で圧縮し、イメージを要求したユーザーにその ZIP ファイルを電子メールで送信する方法を示しています。
最初の ColdFusion ページによって、データベースクエリーから生成されたアーティストの名前がポップアップメニューに挿入されます。
<!--- Create a query to extract artist names from the cfartgallery database. ---> <cfquery name="artist" datasource="cfartgallery"> SELECT FIRSTNAME || ' ' || LASTNAME AS FULLNAME,ARTISTS.ARTISTID FROM ARTISTS </cfquery> <!--- Create a form that lists the artists generated by the query. ---> <cfform action="zipArt_action.cfm" method="post"> <h3>Choose an Artist</h3> <p>Please choose an artist:</p> <cfselect name="artistName" query="artist" display="FULLNAME" value="ARTISTID" required="yes" multiple="no" size="8"> </cfselect> <br/><cfinput type="submit" name="submit" value="OK"> </cfform>
|
最初のアクションページでは、選択されたアーティストによる作品のイメージが表示され、それらのファイルが ZIP 形式で圧縮されて、テンポラリディレクトリに書き込まれます。このページには ZIP ファイルを電子メールで送信するためのフォームも含まれています。
<!--- Create a query to extract artwork for the selected artist from the cfartgallery database. ---> <cfquery name="artwork" datasource="cfartgallery"> SELECT FIRSTNAME, LASTNAME, LARGEIMAGE FROM ARTISTS, ART WHERE ARTISTS.ARTISTID = ART.ARTISTID AND ARTISTS.ARTISTID=<cfqueryparam value="#form.artistName#"> ORDER BY ARTNAME </cfquery> <cfoutput> <p>You have chosen the work of #artwork.FirstName# #artwork.LastName#.</p> <cfset thisDir = ExpandPath(".")> <cfset imgDir = ExpandPath("..")> </cfoutput> <cfset xctr = 1> <table border="0" cellpadding="15" cellspacing="0" bgcolor="#FFFFFF"> <cfoutput query="artwork"> <cfif xctr mod 3 eq 1> <tr> </cfif> <!--- Use the IsImageFile function to verify that the image files extracted from the database are valid. Use the ImageNew function to create a ColdFusion image from valid image files. ---> <cfif IsImageFile("#imgdir#/cfdocs/images/artgallery/ #artwork.largeImage#")> <cfset myImage=ImageNew("#imgdir#/cfdocs/images/artgallery/ #artwork.largeImage#")> <td valign="top" align="center" width="200"> <cfset xctr = xctr + 1> <img src="#imgdir#/cfdocs/images/artgallery/#artwork.largeImage#"/> </td> <!---Zip the files by the specified artist. ---> <cfzip source="#imgDir#/cfdocs/images/artgallery/#artwork.LARGEIMAGE#" action="zip" file="#thisDir#/#artwork.lastname#.zip"> </cfif> </cfoutput> </tr> </table> <h3>Mail the ZIP File</h3> <p>Please enter your e-mail address so we can send you the ZIP file as an attachment.</p> <cfform action = "zipArt_action2.cfm" method="post"> Your e-mail address: <cfinput type = "Text" name = "MailTo"> <!--- Specify the required field. ---> <cfinput type = "hidden" name = "MailTo_required" value = "You must enter your email address"> <cfinput type="hidden" name="zipPath" value="#thisDir#/#artwork.lastname#.zip"> <p><cfinput type = "Submit" name = "OK" label="Mail"> </cfform>
|
2 番目のアクションページでは、ZIP ファイルをメールに添付して送信します。
<h3>Mail the ZIP file</h3> <p>Your file has been mailed to you. </p> <cfset eMail="#form.MailTo#"> <cfset zipPath="#form.zipPath#"> <cfmail from="coldfusion@adobe.com" to="#eMail#" subject="see zipped attachment"> The images you requested are enclosed in a ZIP file. <cfmailparam file="#zipPath#"> </cfmail> |