在Google App Engine中上传文件

引力子:

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

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

010110110101:

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

注意事项:

  1. 此代码使用BlobStore API
  2. ServeHandler类中此行的目的是“修复”密钥,以便它消除浏览器中可能发生的任何名称更改(我在Chrome中未发现任何名称更改)

    blob_key = str(urllib.unquote(blob_key))
    
  3. 最后的“ 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()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Google App Engine(SDK Go)中上传时,静态文件无法投放

使用Python从Google App Engine上的外部URL上传文件

如何使用Google App Engine上传多部分/表单文件?

MultiValueDictKeyError Django Google App Engine-多个文件上传?

将大型视频文件上传到Google App Engine

Google App Engine bulkloader在上传时打开空文件

Google App Engine上传失败

如何在不同于app.yaml的文件夹中上载Google App Engine(Go)项目

在Google Play和App Store中上传类似的应用

使用Google App Engine(Python)将文件上传到Google Cloud Storage

使用Google App Engine将大文件上传到Google Cloud Storage

上传到Google App Engine存储桶并将文件标记为公共文件

自动化Google App Engine上传

将图片上传到Google App Engine

使用Google App Engine上传图片失败

PHP-Google App Engine将大文件作为块上传到Google Drive(可恢复上传)-500错误

PHP Google App Engine在本地开发服务器上上传文件

如何使用Java App Engine将图片文件正确上传到Google云端存储?

开始使用Google App Engine将文件从移动设备上传到计算机

PHP代码读取Excel文件上传到Google App Engine云存储桶

使用Google App Engine将文件上传到Blobstore时出现HTTP 400错误

使用Pyrebase将JSON文件从Google App Engine上传到Firebase存储

将数据文件上传到我的Google App Engine应用程序

Google API PHP CLIENT> 10000个文件,无法上传到APP ENGINE服务

使用Java通过Google App Engine将文件上传到Google Cloud Storage :(无此类文件或目录)

使用 Python 在 Google Earth Engine 中上传资产?

尝试通过app.yaml上传静态.mp3文件时,Google App Engine失败

使用Google Drive API在指定的Google Drive中上传文件

Google App Engine + Django +文件传输失败