Headline About TechLog Download Java VBA Link

May 22, 2007.

CGI.pmを用いたFile upload


昨日画像は後回しにと書いたのに、ついついupload機能の実装を試みた結果、かわりにブログ編集機能が死んでしまった。あう。バックアップとってないし。cgiで画像などのuploadを実現するためには、formのcontent-typeをmultipartにして、CGI.pmに渡して、ってやるのが普通。で、今までの方式と混ぜちゃったのがいけないらしい。CGI.pmベースでブログ編集機能の実装をやり直すか、手を抜いて別フォームに分けるか...。別フォームに分けてAjaxもどきに同じ画面でやるのがおしゃれではあるけれど、人に見せる画面じゃないから凝ってもなぁ...。アジャイル。アジャイル。

...と悩んだ末、実装やり直しました。応用すればHeadlineの編集機能も一瞬で作れますね。20分ぐらいの作業でしたが、ソースが汚くなっちゃったんで、暇なときにリファクタリングしましょう。あと、参考にしたサイトのファイルの保存の仕方に別解があるようなので、暇なときに比較して高速な方を採用しようかな。サムネイル作成機能が欲しいところだけど、これは今度こそ後の機能追加にとっておきましょう。

型枠はできてきました。後はコンテンツが問題(笑)。

技術系ブログのはずが、技術者の書くただの日記化しているので、軽くCGI.pmによるファイルuploadの方法を書いて見ましょうか。

CGI.pmは新しいバージョンのPerlには標準で同梱されているモジュール。プログラムの頭に、「use CGI;」と書いておけば使えます。で、「$hoge = new CGI;」って感じで初期化してインスタンスを取得、「$fH = $hoge->upload('fileタグのname');」でuploadされたファイルのポインタを取得。後はこれを適当な名前の出力に吐き出せば保存完了。

で先の記述について。保存の際$fHをOUTに吐き出す方法とcopyする方法があるのです。copyでやると、OSが処理してくれて速いのでは?となんとなく考えているわけです。$fHの実体は、OSの一時領域に保存されたファイルへのポインタなので。

ちなみにさっきの「$fH = $hoge->upload('fileタグのname');」の「->」を見てCの人は「ぉ」って感じだと思いますが、これオブジェクトのメソッド呼び出しなんですね。今のperlはオブジェクトでも書ける(≠オブジェクト指向言語)のです。CGI.pmには便利なメソッドがいろいろ実装されていて、例えば「print $hoge->strong("強調");」と書くと「print "<STRONG>強調</STRONG>";」とタグを書く代わりに使えたりするわけです。え、微妙?まぁ、ミスタイプや閉じ忘れ防止と言うことで...。

技術的な内容の詳細は個々のページに作成するつもりだったので、codeを書くための機能をこのブログには実装してないんですが、上記のようなパラは限りなく読みづらいですね。こっちにも気が向いたら実装しましょう。これも今は手をつけません。


名前: 意見: パス:

※パスにはこの日記のタイトルをコピペして下さい。


May, 2007
SUN MON TUS WED TUR FRI SAT
12345
6789101112
13141516171819
20212223242526
2728293031