为了账号安全,请及时绑定邮箱和手机立即绑定

在Google App Engine中上传文件

在Google App Engine中上传文件

胡说叔叔 2019-11-25 14:34:01
我打算创建一个Web应用程序,允许用户降级Visual Studio项目文件。但是,似乎Google App Engine通过db.TextProperty和接受在Google服务器上上传文件和存储平面文件db.BlobProperty。我很高兴任何人都可以提供有关如何完成此工作的代码示例(客户端和服务器端)。
查看完整描述

3 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

这是一个完整的工作文件。我从Google网站上提取了原始图片,并对其进行了修改,使其更加真实。


注意事项:


此代码使用BlobStore API

ServeHandler类中此行的目的是“修复”密钥,以便它消除浏览器中可能发生的任何名称更改(我在Chrome中没有观察到)


blob_key = str(urllib.unquote(blob_key))

最后的“ save_as”子句很重要。它将确保文件名在发送到浏览器时不会被篡改。摆脱它,观察会发生什么。


self.send_blob(blobstore.BlobInfo.get(blob_key), save_as=True)

祝好运!


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="/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()


查看完整回答
反对 回复 2019-11-25
  • 3 回答
  • 0 关注
  • 353 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号