【问题标题】:App engine Blobstore self.get_uploads() empty应用引擎 Blobstore self.get_uploads() 为空
【发布时间】:2015-10-05 10:22:59
【问题描述】:

我已将blobstore example 集成到我自己的代码中,但发现无法使其正常工作。图片已上传(在数据库中),但 upload = self.get_uploads()[0] 行不起作用,因为 self.get_uploads() 为空

这是我的代码:

class ImageCreate(Resource):
    def get(self):
        form = ImageCreateForm()
        return render_template('images/create.html', form=form, upload_url=blobstore.create_upload_url('/admin/upload')))

class PhotoUploadHandler(Resource, BlobstoreUploadHandler):
    def post(self):
        try:
            upload = self.get_uploads()[0]
            form = ImageCreateForm(data=request.get_json())
            image =Image(title=form.title.data, blob_key=upload.key(), notes=form.notes.data)
            image.put()
            redirect('/admin/image/list')
        except():
            redirect('/admin/image/list')

api.add_resource(ImageCreate, '/admin/images/create', endpoint='image_create')
api.add_resource(PhotoUploadHandler, '/admin/upload', endpoint='image_upload')

class Image(ndb.Model):
    title = ndb.StringProperty()
    blob_key = ndb.BlobKeyProperty()
    notes = ndb.StringProperty()
    date_added = ndb.DateTimeProperty(auto_now_add=True)


class ImageCreateForm(Form):
    title = StringField('Title', validators=[DataRequired()])
    notes = TextAreaField('Notes')


<form action="{{ upload_url }}" method="post" name="create-image" enctype=multipart/form-data>
    {{ form.hidden_tag() }}
    <div> {{ form.title }}</div>
    <input type="file" name="file">
    <div> {{ form.notes }}</div>
    <div><input type="submit" name="submit" value="Upload"></div>
</form>

【问题讨论】:

    标签: python-2.7 google-app-engine blobstore flask-restful


    【解决方案1】:

    所以,在搜索和尝试了很多之后。并访问了一堆承诺答案(大多数没有)的晦涩网站,我终于找到了为什么这不起作用......显然self.get_uploads()webapp2 特定的。如果使用烧瓶,则需要另一种方法。

    要获取当前上传的文件,最简单的方法是直接访问请求并从 headers 中提取 blob-key,如下所示:

    class PhotoUploadHandler(Resource, BlobstoreUploadHandler):
        def post(self):
            try:
                f = request.files['file']
                header = f.headers['Content-Type']
                parsed_header = parse_options_header(header)
                blob_key = parsed_header[1]['blob-key']
    

    这实际上与self.get_uploads() 功能相同(并替换)并且可以与flask 一起使用。请注意,我从ResourceBlobstoreUploadHandler 扩展,因为我使用的是flask-restfull。只使用一个烧瓶只需要从BlobstoreUploadHandler扩展。

    【讨论】:

      猜你喜欢
      • 2011-03-06
      • 2011-04-18
      • 2013-03-28
      • 2014-04-04
      • 2012-01-19
      • 2013-11-12
      • 1970-01-01
      • 2015-09-03
      • 2013-03-12
      相关资源
      最近更新 更多