0

ユーザーが自分のサイトに動画をアップロードできるアプリを作成しているので、動画を編集して送り返すことができます。私はグーグルアプリエンジンとPythonを使用しています。ブロブなどについて読んだことがありますが、まだ少し説明が必要だと思います。

それは正確にどのように機能しますか?

google blobのサンプルコードを使用してコードを記述したので、ファイルがアップロードされているようです。しかし、私はそれらにアクセスする方法を知りません。どこに保存されているのかさえわかりません。

これが私のフォームです

<form method="POST" action="%s" enctype="multipart/form-data">
    Upload file: <input type="file" name="file" /><br />
    </br>
    <input type="submit" name="Submit" value="Submit"/>
  </form>

そしてここに私のハンドラーがあります:

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
from google.appengine.dist import use_library
use_library('django', '1.2')

import os
import logging
import cgi
import datetime
import urllib
import wsgiref.handlers
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from util.sessions import Session
from google.appengine.ext import db
from google.appengine.api import users
from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers

# A Model for a User
class User(db.Model):
  account = db.StringProperty()
  password = db.StringProperty()
  name = db.StringProperty()

# A helper to do the rendering and to add the necessary
# variables for the _base.htm template
def doRender(handler, tname = 'index.html', values = { }):
  logging.info('doRender(' + tname + ')')
  temp = os.path.join(
      os.path.dirname(__file__),
      'templates/' + tname)
  logging.info(temp)
  if not os.path.isfile(temp):
    return False

  # Make a copy of the dictionary and add the path and session
  newval = dict(values)
  newval['path'] = handler.request.path
  handler.session = Session()
  if 'username' in handler.session:
     newval['username'] = handler.session['username']
  logging.info(newval)
  outstr = template.render(temp, newval)
  handler.response.out.write(outstr)
  return True


class LoginHandler(webapp.RequestHandler):

  def get(self):
    doRender(self, 'login.html')

  def post(self):
    self.session = Session()
    acct = self.request.get('account')
    pw = self.request.get('password')
    logging.info('Checking account='+acct+' pw='+pw)

    self.session.delete_item('username')
    self.session.delete_item('userkey')

    if pw == '' or acct == '':
      doRender(
          self,
          'login.html',
          {'error' : 'Please specify Account and Password'} )
      return

    que = db.Query(User)
    que = que.filter('account =',acct)
    que = que.filter('password = ',pw)

    results = que.fetch(limit=1)

    if len(results) > 0 :
      user = results[0]
      self.session['userkey'] = user.key()
      self.session['username'] = acct
      doRender(self,'index.html',{ } )
    else:
      doRender(
          self,
          'login.html',
          {'error' : 'Incorrect password'} )

class AddUserHandler(webapp.RequestHandler):

  def get(self):
    doRender(self, 'adduser.html')

  def post(self):
    self.session = Session()
    name = self.request.get('name')
    acct = self.request.get('account')
    pw = self.request.get('password')
    logging.info('Adding account='+acct)

    if pw == '' or acct == '' or name == '':
      doRender(
          self,
          'adduser.html',
          {'error' : 'Please fill in all fields'} )
      return

    # Check if the user already exists
    que = db.Query(User).filter('account =',acct)
    results = que.fetch(limit=1)

    if len(results) > 0 :
      doRender(
          self,
          'adduser.html',
          {'error' : 'Account Already Exists'} )
      return

    # Create the User object and log the user in
    newuser = User(name=name, account=acct, password=pw);
    pkey = newuser.put();
    self.session['username'] = acct
    self.session['userkey'] = pkey
    doRender(self,'index.html',{ })

class LogoutHandler(webapp.RequestHandler):

  def get(self):
    self.session = Session()
    self.session.delete_item('username')
    self.session.delete_item('userkey')
    doRender(self, 'index.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)

class MainHandler(webapp.RequestHandler):        

  def get(self):
    if doRender(self,self.request.path) :
      return
    doRender(self,'index.html')

def main():
  application = webapp.WSGIApplication([
     ('/login', LoginHandler),
     ('/add-user', AddUserHandler),
     ('/logout', LogoutHandler),
     ('/upload', UploadHandler),
     ('/serve/([^/]+)?',ServeHandler),
     ('/.*', MainHandler)],
     debug=True)
  wsgiref.handlers.CGIHandler().run(application)

if __name__ == '__main__':
  main()

誰かが私がこれを理解するのを手伝ってもらえますか?また、このファイルをGoogleドライブまたはドロップボックスに直接保存するオプションはありますか?

手伝ってくれてありがとう

4

1 に答える 1

1

Python ファイル オブジェクトのように動作するBlobReaderクラスを使用して、ブロブストア ファイル データにアクセスできます。

例えば:

upload_files = self.get_uploads('file')
blob_info = upload_files[0]
f = blob_info.open() # Return a BlobReader
content = f.read() # Read the entire file content into memory

ドライブ SDKを使用してファイルを Google ドライブに保存できます。Google App Engine のサンプル アプリはこちらにあります。

于 2012-05-09T00:54:13.667 に答える