如何使用GAE blobstore API结合Django上传照片?

时间:2014-04-30 03:32:20

标签: django google-app-engine blobstore

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

ETA:我使用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>')

2 个答案:

答案 0 :(得分:2)

在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云端存储中保存/提供。

答案 1 :(得分:0)

你需要

    from models import Photo
    from < whatever db > import db

    ...

        photo.put()