#!/usr/bin/env ruby # coding: utf-8 require 'cgi' cgi = CGI.new(:accept_charset => "UTF-8") param = cgi.params # CGI変数は配列となる print "Content-type: text/html; charset=UTF-8\n\n" mode = cgi['mode'] maxsize = 2*1024**2 # 最大2MBまで受け付ける thiscgi = "./"+File.basename($0) # $0はこのスクリプトの起動名 # File.basenameでディレクトリ名を除去してファイル名のみになる imgsrc = nil # 画像保存時のファイル名 print <<__END__ File POST test __END__ def error(message) printf("

失敗

\n

%s

\n", message) end if mode == "" print <<__EOM__

ファイルをPOSTする

画像ファイルを選んでね:

画像に対する説明:

__EOM__ # POSTされたら hiddenの変数 mode="decode" となる else # POSTされたらこちらに来る image = cgi["image"] filename = image.original_filename ymd = Time.now.strftime("%Y年%m月%d日") now = Time.now.strftime("%S") # 秒(2桁) if /\.jpg$/ =~ filename # jpgとpngのみ処理 imgsrc = "tmp/image#{now}.jpg" elsif /\.png$/ =~ filename imgsrc = "tmp/image#{now}.png" end # たくさんファイルが書かれると溢れるので最大60*2ファイルに制限 # かつ、3分以上経過したファイルは次のコマンドで消す #### system "zsh -c '/bin/rm -f tmp/dummy tmp/*.*g(Nmm+3)'" if image.size > maxsize error("ふぁいるでかすぎ(#{(maxsize/1024**2).to_s}メガバイト以内)") elsif imgsrc # あらかじめ mkdir -m 1777 tmp しておく必要がある。 open(imgsrc, "w") do |i| i.write cgi['image'].read end message = CGI.escapeHTML(cgi["msg"].read) print <<__EOM__

#{ymd}にポストされた画像

#{message}

__EOM__ # 画像ファイルは作ったらすぐ消してしまう。 fork { fork { STDOUT.close STDERR.close sleep 3 File.unlink(imgsrc) } } Process.wait else error("jpgかpngファイルのみ受け付けます") end end puts " "