| #!/usr/bin/env python |
| import json |
| import os.path |
| import random |
| import re |
| import sys |
| import urllib |
| import wsgiref.handlers |
| import wsgiref.simple_server |
| import webapp2 |
| import tornado.template |
| from google.appengine.ext import blobstore |
| from google.appengine.ext.webapp import blobstore_handlers |
| |
| loader = tornado.template.Loader('.') |
| |
| class _BaseHandler(webapp2.RequestHandler): |
| def render(self, template, **kwargs): |
| d = dict() |
| d.update(kwargs) |
| self.response.write(loader.load(template).generate(**d)) |
| |
| |
| class MainHandler(_BaseHandler): |
| def get(self): |
| upload_url = blobstore.create_upload_url('/upload') |
| self.render('index.html', upload_url=upload_url) |
| |
| |
| class UploadHandler(blobstore_handlers.BlobstoreUploadHandler): |
| def post(self): |
| upload_files = self.get_uploads() |
| sys.stderr.write('upload: %r\n' % upload_files) |
| blob_info = upload_files[0] |
| self.redirect('/view/%s' % blob_info.key()) |
| |
| |
| class ViewHandler(_BaseHandler): |
| def get(self, blobres): |
| blobres = str(urllib.unquote(blobres)) |
| blob_info = blobstore.BlobInfo.get(blobres) |
| reader = blob_info.open() |
| total = 0 |
| while 1: |
| d = reader.read(1024*1024) |
| total += len(d) |
| if not d: break |
| self.render('view.html', blob=blob_info, total=total) |
| |
| |
| settings = dict( |
| debug = 1, |
| ) |
| |
| wsgi_app = webapp2.WSGIApplication([ |
| (r'/', MainHandler), |
| (r'/upload', UploadHandler), |
| (r'/view/([^/]+)$', ViewHandler), |
| ], **settings) |