PIPIONE
这是一个完整的工作文件。我从Google网站上提取了原始图片,并对其进行了修改,使其更加真实。注意事项:此代码使用BlobStore APIServeHandler类中此行的目的是“修复”密钥,以便它消除浏览器中可能发生的任何名称更改(我在Chrome中没有观察到)blob_key = str(urllib.unquote(blob_key))最后的“ save_as”子句很重要。它将确保文件名在发送到浏览器时不会被篡改。摆脱它,观察会发生什么。self.send_blob(blobstore.BlobInfo.get(blob_key), save_as=True)祝好运!import osimport urllibfrom google.appengine.ext import blobstorefrom google.appengine.ext import webappfrom google.appengine.ext.webapp import blobstore_handlersfrom google.appengine.ext.webapp import templatefrom google.appengine.ext.webapp.util import run_wsgi_appclass 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="/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()