説明

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 エントリをテキスト文字列に変換するときに使用する文字セットです。例えば、次の文字セットを指定できます。

  • JIS
  • RFC1345
  • UTF-16

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 オプション  

圧縮に使用する暗号化アルゴリズムです。使用できるオプションは次のとおりです。

  • AES-256
  • AES-128
  • Standard


CFZip タグに属性が指定されている場合、CFZipparam タグの対応する属性によってそれらの属性を継承またはオーバーライドできます。

パスワードのみが指定されている場合のデフォルトの encryptionAlgorithm は AES 256 ビットです。

ディレクトリとともに使用した場合、そのディレクトリ内のすべてのファイルが同じパスワードと暗号化によって保護されます。

使用方法

cfzip タグを使用すると、ファイルの圧縮 / 展開を実行したり、ColdFusion 内の既存の ZIP または JAR ファイルを操作できます。cfzip タグは単独で使用することもできますが、cfzipparam タグと組み合わせて複数のファイルまたはディレクトリを操作することもできます。 cfzip タグは、cfzipparam タグの親タグです。
ZIP 形式は、ファイルのアーカイブや圧縮に使用される標準形式です。JAR 形式は ZIP 形式をベースとしています。JAR ファイルはプラットフォームに依存しません。

注意:cfzip タグは、ディレクトリを作成しません。存在しないディレクトリを指定した場合も、エラーは生成されません。

次のシンタックスを使用して、パスを取る任意の属性でメモリ内のファイルまたはディレクトリを指定します。メモリ内のファイルはディスクに書き込まれないため、一時的データの処理が早くなります。

ram:///filepath

ファイルパスには、複数のディレクトリを含めることができます (例 : 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>

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー