忍者ブログ
全くIT系ではない製造業の社員がイントラ上でColdFusionと格闘。システム構築を外部委託するとき「できればColdFusionでお願いします」と頼むのだが・・・・
[89] [88] [87] [86] [85] [84] [83] [82] [81] [80] [79]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

火曜夜にやってるNHKのバラエティー(?)「サラリーマンNEO」
民放じゃなく、NHKがやってると思いながら見ると、おもしろい。
せくすぃー部長が好き。

さて、

イントラのページでエクセルやワードのファイルを配布する場面はよくありますね。
で、
ふつーに
 <a href ="./配布資料/ナントカ一覧表.xls">ナントカ一覧表</a>
などというリンクにしているページもよくあります。

このリンクをクリックすると、エクセルがブラウザ上で開いちゃいます。

こんな時はファイル名だけでなくフォルダ名までもバリバリ日本語だったりしますね。

イントラ的にはこれでまぁよし とすることが多いかもしれません。
お気楽ですから。

ただ、保存に戸惑うはずです。
イントラなら
「このエクセルどうやって保存するんだ?」
 と質問の電話がかかってきて、
「あぁ、開くときに右クリックして"対象をファイルに保存"してください」
とか、
「ブラウザのファイルメニューから"名前をつけて保存"を選んでください」
とか言えばすみますが。


また、windows+IISの組み合わせだと、ファイル名やフォルダ名に日本語を使ってもそのまま動いてくれますが、Linux + Apache なんかだとダメです。


ということで、リンクをクリックすると 
このファイルを開くか保存しますか? とダイアログが出るようにする方法について。

実例はこんな感じ。

ナントカ一覧表

ソース見ればわかりますが、このリンクは、
<a href="http://cold-fusion.heteml.jp/samples/nantoka.cfm">
となってます。

ColdFusion側(ヘテムルでやってます)のソースは、

<cfheader name="Content-Disposition" value="attachment; filename=#URLEncodedFormat('ナントカ一覧表')#.xls">
<cfcontent type="application/x-download" file="/home/sites/heteml/hoge/fuga/hoge/web/samples/nantoka.xls" deletefile="no">

<cfheader>(→LiveDocs) タグと <cfcontent>(→LiveDocs) タグのみです。

<cfheader>の value属性にユーザーが「保存」するときのファイル名を書いています。
これは、実ファイル名と異なってもかまいません。
なので、
実ファイルは英文字、ダウンロードするときは日本語ファイル名 という風に、日本人ユーザーにやさしくすることができます。
日本語ファイル名にするときは、URLEncodedFormat(→LiveDocs) しないと、文字化けします。
そのとき、拡張子はエンコードしないところがポイント


<cfcontent>のfile属性で、実態ファイルをフルパスで指定します。
windowsならドライブレター(D: とか)で始まります。Linuxなら / で始まります。
hetemlの場合、コントロールパネルのユーザー情報のところでフルパスを確認できますね。


ダウンロードするファイルが固定ならこれでOKですが、DBベースで可変になる場合もあります。
そんなときは、url引数なんかでワンクッション置いてあげる方法もあります。

ナントカ一覧表

<a href="dl.cfm?filename=%E3%83%8A%E3%83%B3%E3%83%88%E3%82%AB%E4%B8%80%E8%A6%A7%E8%A1%A8&kakuchoushi=xls&sourcefilename=nantoka.xls">

受け側のdl.cfmは、

<cfheader name="Content-Disposition" value="attachment; filename=#URLEncodedFormat(URLDecode(url.filename))#.#url.kakuchoushi#">
<cfcontent type="application/x-download" file="/home/sites/heteml/hoge/fuga/mogu/web/samples/#url.sourcefilename#" deletefile="no">

なぜだかわかりませんが、URLEncodされたファイル名を、一度Decodeして、さらにまたEncodeしないとうまくいきませんです。はい。
これで数時間ハマったよ・・・・(T_T) 


「開く」を選んだときに、ブラウザではなくアプリケーションから開く方法があるはずなんですが、やり方がわかりません・・・・

cfheader で value=attachment; 
cfcontent で type="application/x-download"

とすれば、アプリケーションから直接開くようになりました。

でも、ファイル名がURLエンコードされてしまう・・・・

日本語のままにする方法、だれか教えて!

PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
ブログ内検索
プロフィール
HN:
CFIF
性別:
男性
自己紹介:
もっと日本でもColdFusionが広まって欲しいです。

情報通信を生業としない企業の、システム系でもない普通の社員なので、 ColdFusionは独学。参考書が少ないのがツライです・・・・なんだかんだ、ColdFusion4.xのシリウス時代から7年くらいのおつきあい?リンコムNextのソースが教科書かも。

外注するときはよく「できればColdFusionで・・・・」とお願いするのですが、ほとんどの場合「えっ!?」と驚かれてしまい、「SEのアサインが・・・」などと営業さんが困ってしまうことが多くて悲しいです。
ちょっとしたものなら自分でシステム構築しちゃいますが、一人でやるには時間が足りませんね・・・

FlashRemotingとかもやりますが、Flexには手を出してません。
と、最初の頃書きましたが、ついにFlexに手を出しました。Flex1.5はイマイチわかりませんでしたが、Flex2は別物ですね。これで6万円でイインデスカ?
そしてFlex2とColdFusionの組み合わせなら無敵な気がしますよ。ほんとに。
最新トラックバック
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
なかのひと
忍者ブログ [PR]