サーバー上のファイルをユーザーがダウンロードする際に、アンカー(<a>)タグを使用するとブラウザ上で開いてしまうようなファイル(PDFや画像等)については、cfcontentとcfheaderとを使ってダウンロードさせる方法があります。
<cfheader name="Content-Disposition" value="attachment; filename=""ダウンロードする際の日本語を含むファイル名.pdf""" /> <cfcontent type="application/octet-stream" file="c:/temp/aaaaaa.pdf" />
【ポイント】
cfheaderタグのvalue="attachment; filename=ファイルパス\ファイル名"指定で、ブラウザ上からダウンロード処理が可能です。 cfcontentタグのdeleteFile="yes"指定で、ダウンロード後にサーバ上に作成したエクセルファイルは削除されます。
cfcontentでファイルをダウンロードさせる際に、
ダウンロードさせたいデータが文字列(CSVなど)の場合は、そのままではcfcontentでダウンロードできないため、一旦文字列をバイナリに変換する処理が必要です。以下のプログラム例を参考にしてください。
<cfprocessingdirective pageencoding="UTF-8" /> <cfscript> function stringToBinary( String stringValue ){ var base64Value = toBase64( stringValue, "MS932" ); var binaryValue = toBinary( base64Value ); return( binaryValue ); } </cfscript> <cfset csvFile="東京Ⅰ,千葉②,埼玉,神奈川㈱" > <cfheader name="Content-Disposition" value="attachment; filename=""pref.csv""" /> <cfcontent type="application/octet-stream" variable="#stringToBinary(csvFile)#" reset="yes"/>
上記のサンプルではユーザー定義関数(UDF:stringToBinary)を定義して、そこにCSVデータを渡しています。toBase64にエンコード「MS932(Shift_JIS)」
※サンプルで使用している各関数については、
ダウンロード時のファイル名に特殊文字や日本語以外の文字(※ColdFusion日本語版では、日本語以外の文字の動作はサポートされていませんが)が含まれている場合、上記で紹介した方法ではブラウザで表示されない場合があります(__.pdfみたいになります)。その対応として、cfheaderによるレスポンスヘッダーに filename* で UTF-8エンコードしたファイル名を付け加えるという方法があります(→参考サイト)。
<cfset fileName="ブラウザでそのまま表示できないファイル名.pdf"> <cfheader name="Content-Disposition" value="attachment; filename=""#filenName#""; filename*=UTF-8''#EncodeForURL(fileName)#" /> <cfcontent type="application/octet-stream" file="c:/temp/aaaaaa.pdf" />
記事公開日:2024年12月27日
最終更新日:2024年12月27日
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.
Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.