2012-05-08 28 views
0

私は自分のサイトに動画をアップロードできるアプリを書いているので、編集して送り返すことができます。私はGoogleのアプリエンジンとPythonを使用しています。私はブロブや物について読んだことがあるが、私はまだ少し説明が必要だと思う。Google App Engine、アップロード動画、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ドライブまたはDropboxに直接保存するオプションはありますか?ヘルプ

+0

用サンプルアプリを見つけることができますが、 "App Engineのブロブストア" をグーグルでみましたまたは「GoogleドライブAPI」?あなたはいくつかの有用な結果を見つけることができるかもしれません... –

+0

私はGoogleのアプリケーションエンジンのブロブストアのコードを使用していたと私は以前にいくつかの研究を行うことなく質問をするwouldnt。あなたの助けをありがとうtho –

+0

あなたの質問は何ですか?私たちにコードの壁を与えて、「誰かがこれを理解する手助けができますか?」と曖昧なことを尋ねるだけではありません。あなたが把握したいことが何であるかはわかりません。 –

答えて

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 

あなたはGoogleドライブにファイルを保存するためにDrive SDKを使用することができ、あなたは、Google App Engineのhere

+0

どうすれば私のコンピュータにアクセスすればよいですか?申し訳ありませんが、私はファイルを管理するためのアプリを書いたことがありません。 –

+0

blobstoreファイルがApp Engine上でホストされている場合、あなたの質問に投稿した 'ServeHandler'を使ってそれらを提供することができます。 – proppy

+0

はGoogleドライブに関するご質問に私の回答を更新しました。 – proppy