読者です 読者をやめる 読者になる 読者になる

ゆーすけべー日記

はてなBlogってどーなの!?

簡易GyazoサーバをPlackで実装したら27行くらいで書けた

参考文献: 「Webサーバ不要、40行程度のスクリプトひとつで動かせる Gyazoサーバー(クローン)を書いた - 今日もスミマセン。

こちらはRubyで書いてあるので昨日の Smiley Hackathon#7 にて、 Perl/Plack で実装したらどうなるかをやってみた。 dbm に入れる件を除いているのでより簡易な方法だけど 27 行くらいで書けて、 plackup コマンドでそのまま運用できるのでなかなかお手軽でいい感じです。 Plack::App::File で 画像のサーブが簡単にできるのが便利ですね。 .psgi のコード貼付けておきますので参考にしてみてください。 Plack はこのように「自分専用のお手軽 gyazo サーバが欲しい」といった個人の簡単なユースにあっていると思いましたね。

use Plack::App::File;
use Plack::Builder;
use Plack::Request;
use Digest::MD5 qw( md5_hex );
use IO::File;

my $app = sub {
    my $env = shift;
    my $req = Plack::Request->new($env);
    if ( $req->path eq '/upload' ) {
        my $imagedata = $req->param('imagedata');
        my $filename  = "image/" . md5_hex($imagedata) . ".png";
        my $fh        = IO::File->new( $filename, 'w' );
        print $fh $imagedata;
        $fh->close;
        my $res = Plack::Request->new_response(200);
        $res->content_type('text/plain');
        $res->content( $req->base() . $filename );
        return $res->finalize;
    }
    return [ 404, [], [] ]; #xxx
};

builder {
    mount "/image" => Plack::App::File->new( root => "./image" );
    mount "/" => $app;
}