web.pyで画像掲示板
ちょっと実験に必要だったので「画像をPOSTできて、それの一覧が表示されるサーバ」を作ってみました。これからもうちょっと新しい機能を入れるんだけども、今のシンプルな状態を公開しておく方が読みやすくていいのかなと思って貼ってみます。ちなみにもう少し規模が大きければIndex#GETはテンプレートを使うように変えるたほうがよさそう。
import web urls = [ "/", "Index", "/img/(.+)", "GetImage", ] def id2path(ID): import os, re if not re.match("\d{8}_\d{6}_\d+", ID): raise RuntimeError("invalid format") return os.path.join("img", ID + ".png") class Index(object): def GET(self): import os print INDEX_GET for f in os.listdir("img"): print "<img src='img/%s'><br>" % f[:-4] def POST(self): from time import strftime, clock id = strftime("%Y%m%d_%H%M%S_%%d") % (clock() * 1000000) print id data = web.input().Image file(id2path(id), "wb").write(data) print "ok" INDEX_GET = """ <html> <form enctype="multipart/form-data" action="." method="post"> <input type="file" name="Image"/> <input type="submit"> </form> <hr> """ class GetImage(object): def GET(self, ID): web.header("Cotent-type", "image/png") print open(id2path(ID), "rb").read() if __name__ == '__main__': web.webapi.internalerror = web.debugerror web.run(urls, globals(), web.reloader)
追記。
printで出力したらいくつかのバイナリファイルは壊れて読めなくなった。sys.stdout.writeを使う。