#!/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 "
"