猿问

在Google App Engine中上传文件

我打算创建一个Web应用程序,允许用户降级Visual Studio项目文件。但是,似乎Google App Engine通过db.TextProperty和接受在Google服务器上上传文件和存储平面文件db.BlobProperty。


我很高兴任何人都可以提供有关如何完成此工作的代码示例(客户端和服务器端)。


胡说叔叔
浏览 354回答 3
3回答

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):&nbsp; &nbsp; def get(self):&nbsp; &nbsp; &nbsp; &nbsp; upload_url = blobstore.create_upload_url('/upload')&nbsp; &nbsp; &nbsp; &nbsp; self.response.out.write('<html><body>')&nbsp; &nbsp; &nbsp; &nbsp; self.response.out.write('<form action="%s" method="POST" enctype="multipart/form-data">' % upload_url)&nbsp; &nbsp; &nbsp; &nbsp; self.response.out.write("""Upload File: <input type="file" name="file"><br> <input type="submit" name="submit" value="Submit"> </form></body></html>""")&nbsp; &nbsp; &nbsp; &nbsp; for b in blobstore.BlobInfo.all():&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.response.out.write('<li><a href="/serve/%s' % str(b.key()) + '">' + str(b.filename) + '</a>')class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):&nbsp; &nbsp; def post(self):&nbsp; &nbsp; &nbsp; &nbsp; upload_files = self.get_uploads('file')&nbsp; &nbsp; &nbsp; &nbsp; blob_info = upload_files[0]&nbsp; &nbsp; &nbsp; &nbsp; self.redirect('/')class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):&nbsp; &nbsp; def get(self, blob_key):&nbsp; &nbsp; &nbsp; &nbsp; blob_key = str(urllib.unquote(blob_key))&nbsp; &nbsp; &nbsp; &nbsp; if not blobstore.get(blob_key):&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.error(404)&nbsp; &nbsp; &nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self.send_blob(blobstore.BlobInfo.get(blob_key), save_as=True)def main():&nbsp; &nbsp; application = webapp.WSGIApplication(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [('/', MainHandler),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;('/upload', UploadHandler),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;('/serve/([^/]+)?', ServeHandler),&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ], debug=True)&nbsp; &nbsp; run_wsgi_app(application)if __name__ == '__main__':&nbsp; main()
随时随地看视频慕课网APP

相关分类

Python
我要回答