Voici une complète, fichier de travail. J'ai tiré de l'original à partir du site Google et l'a modifié pour le rendre un peu plus du monde réel.
Quelques choses à noter:
- Ce code utilise le BlobStore API
-
Le but de cette ligne dans le
ServeHandler classe est de "fixer" l'
clé, de sorte qu'il se débarrasse de tout nom
une déformation qui peut avoir eu lieu dans
le navigateur (je n'ai pas d'observer tout en
Chrome)
blob_key = str(urllib.unquote(blob_key))
-
Le "save_as" clause à la fin de ce qui est important. Il fera en sorte que le nom de fichier ne se déchire lorsqu'il est envoyé à votre navigateur. Se débarrasser de lui pour observer ce qui se passe.
self.send_blob(blobstore.BlobInfo.get(blob_key), save_as=True)
Bonne Chance!
import os
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 import template
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>')
self.response.out.write('<form action="%s" method="POST" enctype="multipart/form-data">' % upload_url)
self.response.out.write("""Upload File: <input type="file" name="file"><br> <input type="submit" name="submit" value="Submit"> </form></body></html>""")
for b in blobstore.BlobInfo.all():
self.response.out.write('<li><a href="http://stackoverflow.com/serve/%s' % str(b.key()) + '">' + str(b.filename) + '</a>')
class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
upload_files = self.get_uploads('file')
blob_info = upload_files[0]
self.redirect('/')
class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
def get(self, blob_key):
blob_key = str(urllib.unquote(blob_key))
if not blobstore.get(blob_key):
self.error(404)
else:
self.send_blob(blobstore.BlobInfo.get(blob_key), save_as=True)
def main():
application = webapp.WSGIApplication(
[('/', MainHandler),
('/upload', UploadHandler),
('/serve/([^/]+)?', ServeHandler),
], debug=True)
run_wsgi_app(application)
if __name__ == '__main__':
main()