上传Google App Engine中的文件 [英] Upload files in Google App Engine

查看:175
本文介绍了上传Google App Engine中的文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am planning to create a web app that allows users to downgrade their visual studio project files. However, It seems Google App Engine accepts files uploading and flat file storing on the Google Server through db.TextProperty and db.BlobProperty.

我很高兴任何人都可以提供代码示例(客户端和服务器端),以了解如何完成这项工作。

I'll be glad anyone can provide code sample (both the client and the server side) on how this can be done.

推荐答案

这是一个完整的工作文件。我从Google网站上下载了原创内容,并对其进行了修改,使其更加真实。

Here is a complete, working file. I pulled the original from the Google site and modified it to make it slightly more real world.

需要注意的几件事:


  1. 此代码使用 BlobStore API
    ServeHandler类中的这一行的目的是为了修复
    键,以便删除任何名称
    可能发生在
    浏览器中(我没有在
    Chrome中观察到任何内容)
  1. This code uses the BlobStore API
  2. The purpose of this line in the ServeHandler class is to "fix" the key so that it gets rid of any name mangling that may have occurred in the browser (I didn't observe any in Chrome)

blob_key = str(urllib.unquote(blob_key))


  • 在此结束时很重要。它将确保文件名在发送到浏览器时不会受到损坏。

  • The "save_as" clause at the end of this is important. It will make sure that the file name does not get mangled when it is sent to your browser. Get rid of it to observe what happens.

    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()
    

    这篇关于上传Google App Engine中的文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆