【问题标题】:upload file to blobstore data store将文件上传到 Blobstore 数据存储
【发布时间】:2012-04-22 07:10:35
【问题描述】:

我是 Google 应用引擎的新手。所以请大家帮我解决这个问题。明确地说,我的代码是错误的,但我不知道它在哪里?这里代码:

import os
import urllib

from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.ext.webapp.util import run_wsgi_app
import datetime
import wsgiref.handlers
from google.appengine.api import mail
from google.appengine.ext import db
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext.webapp \
    import template


class MyUsers(db.Model):
    firstname = db.StringProperty(
                    required=False)
    lastname = db.StringProperty(
                    required=False)
    email = db.StringProperty(
                    required=False)
    zipcode = db.StringProperty(
                    required=False)
    file = db.BlobProperty(
                    required=False)
    idea = db.TextProperty(
                    )
    ask = db.StringProperty(
                    required=False)
    contact_back = db.StringProperty(
                    required=False)
    phone = db.StringProperty(
                    required=False)
    regdate = db.DateTimeProperty(
                    auto_now_add=True)

class MainHandler(webapp.RequestHandler):
    def get(self):
        self.response.out.write(
            template.render('expert.html',[]))


class Register(webapp.RequestHandler):
    def get(self):
            upload_url = blobstore.create_upload_url('/upload')
            self.response.out.write(
            template.render('expert.html',[]))

    def post(self):
        user = MyUsers(
            firstname = self.request.get('firstname'),
            lastname = self.request.get('lastname'),
            email = self.request.get('email'),
            zipcode = self.request.get('zipcode'),
            ask = self.request.get('ask'),
            idea = self.request.get('idea'),
            file = self.request.get('file'),
            contact_back = self.request.get('contact_back'),
            phone = self.request.get('phone'),
            )
        phone = self.request.get('phone')
        firstname = self.request.get('firstname')
        email = self.request.get('email')
        lastname = self.request.get('lastname')
        user.put()

        emailto = self.request.get('email')
        body = """Dear """+firstname+""":

        Thank you for registering.

        Please let us know if you have any questions.

        As One Source.
        """
        mail.send_mail("daniyar.seisenov@gmail.com", emailto, "Confirmation Email", body)
        mail.send_mail(sender="Daniyar Seisenov <daniyar.seisenov@gmail.com>",
              to="Daniyar Seisenov <daniyar.seisenov@gmail.com>",
              subject="New User",
              body="""
        This applicant has just registered. Please review:

        Firstname: """+firstname+"""
        Lastname: """+lastname+"""
        Email: """+email+"""
        Phone: """+phone+"""



        """)
        self.redirect('/')



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]

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)        
        self.redirect('/serve/%s' % blob_info.key())

class Users(webapp.RequestHandler):
    def get(self):
        myusers=db.GqlQuery(
            'SELECT * FROM MyUsers '
            'ORDER BY regdate DESC'
            )
        values = {
            'myusers':myusers,
            'totalmyusers' : myusers.count()
        }

        self.response.out.write(
            template.render('userscountandremove.html',
                            values))

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


if __name__ == '__main__':
    main()

当我从expert.html 按提交时,“文件”不会进入数据存储中的blobstore。如果您知道什么是解决方案,请帮助我。谢谢

【问题讨论】:

    标签: python google-app-engine file-upload blobstore


    【解决方案1】:

    这有点令人困惑,但数据存储和 blobstore 是应用引擎中的两个独立存储机制。 BlobProperty 将 Blob 存储在数据存储区中,而不是 Blob 存储区中。

    看起来您的代码会将文件放入 BlobStore,但您的 MyUsers.file 属性需要存储 BlobStore 密钥。

    另一种选择是将 blob 实际存储在数据存储中,在这种情况下,您不会使用 BlobstoreUploadHandler,而是必须自己从 POST 数据中提取对象,并将其存储在 MyUsers 中。文件字段。

    【讨论】:

    • 感谢您的回复。你不认为我的问题也可能在这里:我的模板页面操作中的 self.redirect('/serve/%s' % blob_info.key()) 是:(/register).. 我试图将 %s 替换为/register,但它不起作用..你介意告诉我我应该用 &s 做什么吗?再次感谢
    • 那么您是将文件存储在 Blobstore 中还是作为 Blob 存储在 Datastore 中?首先,你需要弄清楚这一点。 Youre Register() 函数将文件保存在数据存储中,但 ServeHandler() 尝试从 Blobstore 中检索它。
    • 我想将我的文件存储在 Blobstore 中。如果您能帮助我,将不胜感激
    • 阅读我最初的回答后,您有什么尝试?我能给你的最好的方向是确保你的 UploadHandler() 被点击以便上传文件,然后确保你保存 blob_info 某个地方(很可能在 MyUsers.file 中)。然后,当您要获取文件时,请确保使用相同的 blob_info。
    猜你喜欢
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2014-10-10
    相关资源
    最近更新 更多