Загрузите файл в Google App Engine и сделайте его загружаемым

Я новичок в движке приложений Google и хочу использовать его в качестве сервера, чтобы люди могли загружать файл. Я прошел учебники по python. Я не нашел ничего, что могло бы на самом деле помочь мне загружать файлы на сервер для этой цели.


person JustCurious    schedule 14.12.2011    source источник
comment
Документы предоставляют предварительно написанный пример, который делает именно это. Куда ты смотрел?   -  person Nick Johnson    schedule 14.12.2011
comment
Пример гостевой книги и другие базовые вещи   -  person JustCurious    schedule 14.12.2011


Ответы (2)


В руководстве по Blobstore приводится пример именно для этого варианта использования. Эта ссылка предоставляет этот код: приложение, которое позволяет пользователям загружать файлы, а затем сразу же скачивать их:

#!/usr/bin/env python
#

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

class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
        upload_files = self.get_uploads('file')  # 'file' is file upload field in the form
        blob_info = upload_files[0]
        self.redirect('/serve/%s' % blob_info.key())

class ServeHandler(blobstore_handlers.BlobstoreDownloadHandler):
    def get(self, resource):
        resource = str(urllib.unquote(resource))
        blob_info = blobstore.BlobInfo.get(resource)
        self.send_blob(blob_info)

def main():
    application = webapp.WSGIApplication(
          [('/', MainHandler),
           ('/upload', UploadHandler),
           ('/serve/([^/]+)?', ServeHandler),
          ], debug=True)
    run_wsgi_app(application)

if __name__ == '__main__':
  main()
person Chris Bunch    schedule 14.12.2011

Вы также можете проверить в очень хорошее приложение GAE/python из блога Ника Джонсона, которое имеет приятный интерфейс, а также позволяет загружать несколько файлов, если вам нужно. Я взял этот код для создания своих приложений, которым нужно что-то вроде файловой системы, и управление большими двоичными объектами решает эту проблему.

person Niklas R.    schedule 14.12.2011