【问题标题】:How to upload photo using GAE blobstore API combined with Django?如何使用 GAE blobstore API 结合 Django 上传照片?
【发布时间】:2014-06-16 05:59:39
【问题描述】:

我知道上传到 blobstore 的最佳方式是使用 blobstore API,所以我尝试实现它,但我遇到了一些奇怪的错误,似乎表明我不能只嵌入 blobstore 处理程序在我的views.py 文件中。我是不是搞错了?

ETA:我 am 将 Django 用于我的所有其他视图和模板,以防不清楚。只是想确保没有人认为我无缘无故地导入了 Django 的东西。我在这个项目中使用它有点卡住了。

这是我目前遇到的错误:

AttributeError at /fileupload

'PhotoUploadHandler' object has no attribute 'status_code'

Request Method:     GET
Request URL:    http://localhost:8080/fileupload
Django Version:     1.5.4
Exception Type:     AttributeError
Exception Value:    

'PhotoUploadHandler' object has no attribute 'status_code'

Exception Location:     C:\Program Files (x86)\Google\google_appengine\lib\django-1.5\django\middleware\common.py in process_response, line 106

这是我的views.py文件中的文件上传部分:

from django import http 
from django.core.context_processors import csrf
from django.views.decorators.csrf import csrf_protect
from django.template import RequestContext
from django.shortcuts import render_to_response
from models import Contact
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.ext import blobstore
from google.appengine.ext import webapp

class PhotoUploadHandler(blobstore_handlers.BlobstoreUploadHandler):
    def post(self):
        upload = self.get_uploads()[0]
        photo = Photo(blob_key=upload.key())

        db.put(photo)

        self.response.out.write('<html><body><img class="imgpreview" src="/photo/%d"></body></html>' % photo.key().id())

    def get(self):
        upload_url = blobstore.create_upload_url('/photo')
        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">')
        self.response.out.write('<br><input type="submit" value="Upload"></form>')
        self.response.out.write('</body></html>')

【问题讨论】:

    标签: django google-app-engine blobstore


    【解决方案1】:

    使用 django 工具包来启用在 django 中默认支持在 GCS 中存储文件可能会更简单。

    在你的 settings.py 中:

    APPENGINE_TOOLKIT = {
        # ...,
        'BUCKET_NAME': 'your-bucket-name',
    }
    DEFAULT_FILE_STORAGE = 'appengine_toolkit.storage.GoogleCloudStorage'
    

    https://github.com/masci/django-appengine-toolkit

    然后,文件将自动且透明地从 Google Cloud Storage 保存/提供。

    【讨论】:

      【解决方案2】:

      你需要

          from models import Photo
          from < whatever db > import db
      
          ...
      
              photo.put()
      

      【讨论】:

        猜你喜欢
        • 2014-06-27
        • 1970-01-01
        • 1970-01-01
        • 2011-04-04
        • 2013-12-16
        • 2015-06-18
        • 2016-07-30
        • 2018-10-14
        • 1970-01-01
        相关资源
        最近更新 更多