If you need easy accessible personal file store, there are a lot of them on the web. Another solution is to use google blobstore service – a geek’s choise 🙂
import urllib from google.appengine.ext import blobstore from google.appengine.ext import webapp from google.appengine.ext.webapp import blobstore_handlers from google.appengine.ext.webapp.util import run_wsgi_app class MainHandler(webapp.RequestHandler): def get(self): upload_url = blobstore.create_upload_url('/upload') self.response.out.write("""<html> <body style="font-family:arial,sans-serif;"> <form action="%s" method="POST" enctype="multipart/form-data"> Upload File:<br/> <input type="file" name="file"/> <input type="submit" name="submit" value="Submit"/> </form>""" % upload_url) for b in blobstore.BlobInfo.all(): self.response.out.write("""<li> <a href="/serve/%s">%s</a> (<a href="/delete/%s">Delete</a>)""" % (str(b.key()), str(b.filename), str(b.key()))) self.response.out.write("</body></html>") class UploadHandler(blobstore_handlers.BlobstoreUploadHandler): def post(self): self.redirect('/') class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler): def get(self, resource): resource = str(urllib.unquote(resource)) blob_info = blobstore.BlobInfo.get(resource) self.send_blob(blob_info, save_as=blob_info.filename) class DeleteHandler(webapp.RequestHandler): def get(self, resource): resource = str(urllib.unquote(resource)) blob_info = blobstore.BlobInfo.get(resource) blob_info.delete() self.redirect('/') def main(): application = webapp.WSGIApplication( [('/', MainHandler), ('/upload', UploadHandler), ('/delete/([^/]+)?', DeleteHandler), ('/serve/([^/]+)?', ServeHandler), ], debug=True) run_wsgi_app(application) if __name__ == '__main__': main()