野良plu: Zip file upload for MT

※本記事は、旧 Tech Talk Blog 内の 「野良plu: Zip file upload for MT (http://www.sixapart.jp/techtalk/2006/10/mt_plugin_zip-file-upload.html) はてなブックマーク - 」 で公開されていた記事を移転しました。

いつも Tech Talk Blog をご覧頂き誠にありがとうございます。

Movable Type 開発エンジニアの たかやまです。こんにちわ。

前回の野良 plu では「This is good for MT」というプラグインを紹介しましたが、実食が無かったのでインストール・設定が出来なかったという方の為に加筆修正を加えてありますので宜しかったらそちらもどうぞ。

さて、今回の野良pluでは「Zip File Upload for MT」なるものをご紹介します。

下ごしらえ

Movable Type のファイルアップロードは1回の操作につき1つのファイルをアップロードするので、複数のファイルをアップロードしたい場合には何度も同じ操作を繰り返す必要が有るのですが、弊社サービスの TypePad のフォトアルバムではなんと Zip 圧縮されたファイルを送信してサーバー上で解凍する事が出来るのです。

それ頂きましょう。という事で Movable Type でもこれと同じ事が出来るようにしてしまおう。というのが狙いです。

調理

今回のプラグインは code.sixapart.com にはありませんので、添付してある Zip ファイルを解凍してご覧ください。

今回のプラグインは、ファイルがアップロードされたタイミングでアーカイブファイルを解凍するという事を行うのですが、こんな時には「CMSUploadFile」というコールバックを使うとアップロードされたファイルのサーバ上での物理ファイル名などが取れるので操作を行う事が可能です。

'CMSUploadFile' => {
priority => 9,
code => \&_hdlr_upload_file_callback
},

今回はアップロードされた Zip ファイルを解凍しないというオプションを設けてますので、上記コールバックの中でアーカイブファイルの解凍は行わずにファイル名を取得するだけにします。

sub _hdlr_upload_file_callback {
my ($eh, %params) = @_;
my $filename = $params{'File'};
$plugin->{'filename'} = $filename;
1;
}

では、ファイルの解凍はどこで行うのか?という事ですが。アップロードフォームへのフィールドの追加も行いますので、今回は Transformer コールバックを使ってファイルアップロード完了ページの生成時に解凍してしまおうと思います。

'MT::App::CMS::AppTemplateOutput.upload_complete' => {
priority => 9,
code => \&_unzip_file
},

Transformer コールバックの中では、物理ファイル名が取得出来ませんので、先ほどのコールバックで取得しておいたファイル名を使って解凍します。

sub _unzip_file {
my ($eh, $app, $tmpl_str, $param, $tmpl) = @_;
my $q = $app->param;
my $d = $q->param('zipenable');
my $filename = $plugin->{'filename'};

Transformer の本来の使い方は生成される HTM Lに対して書き換えを行うものです。しかし、使う機会は限られますが、今回のようにイベントトリガーとして使用する事も出来ます。

実食

プラグイン本体はこちらからダウンロードが可能です。

インストール

ダウンロードしたファイルに含まれているファイル、フォルダを全て Movable Type の plugins ディレクトリにアップロードします。また、外部モジュールとして「Archive::Zip」が必要となりますのであらかじめ CPAN から取得してください。

設定

Movable Type の管理画面にログインをして、設定を行うブログのメニューより「設定」-「プラグイン」を開き、「zip file upload」がある事を確認の上「設定」をクリックします。 Zip ファイル中に含まれていても解凍したくないファイルやフォルダがある場合には、改行区切りで入力します。

使い方

通常通り「ファイルのアップロード」からファイルをアップロードしてください。「Extract on server」のチェックを外すとZipファイルの解凍を行いません。

Six Apart をフォローしませんか?

次の記事へ

Yahoo! 検索の井上俊一さんにお越しいただきました

前の記事へ

MogileFS::Client と MogileFS 内部でのファイルノード管理