2013-07-17 2 views
6

自分のウェブサイトの画像をcassandraデータベースに保存したい!私は画像のバイトを読み込んで保存する必要があります。あなたは私にとって素晴らしいコードを持っていますか?私はpython2.7、djangoフレームワークとcqlエンジンを使用しています!cqlエンジンを使用して、画像をBytesフィールドとしてcassandraデータベースに格納する方法は?

これは私のコードです:

の1-マイモデル:

from cqlengine import columns 
from cqlengine.models import Model 

class UserImage(Model): 
    Email = columns.Text(primary_key=True) 
    image=columns.Bytes(required=False) 

2 - マイフォーム:

class UserImage(forms.Form): 
    image=forms.ImageField() 

、3-マイビュー:

from MainAPP.models import UserImage as UserImageModel 
from MainAPP.forms import UsersForms 

from django.http import HttpResponse 
from cqlengine import connection 
from PIL import Image 

def UploadImage(request): 
    if request.method == 'POST': 
     form = UsersForms.UserImage(request.POST, request.FILES) 
     if form.is_valid(): 
      try: 
       image_data=Image.open(request.FILES['image']) 
      except IOError: 
       return HttpResponse("cannot upload %s"% request.FILES['image'].name) 
      connection.setup(['127.0.0.1:9160']) 
      UserImageModel.create(Email='[email protected]', image=image_data) 
      return HttpResponse('Stored Successfully!') 
    else: 
     form= UsersForms.UserImage() 
     return render_to_response('Users/uploadImage.html', {'form': form}, context_instance=RequestContext(request)) 

マイテンプレート:

{% block content %} 
    <form enctype="multipart/form-data" method="post" action=""> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <button type="submit">Upload</button> 
    </form> 
{% endblock %} 

レンダリングテンプレートマイERROR:

AttributeError at /uploadImage 
encode 
Request Method: POST 
Request URL: http://127.0.0.1:8000/uploadImage 
Django Version: 1.5.1 
Exception Type: AttributeError 
Exception Value: encode 

あなたの考えは何ですか?私を案内してください...

+2

を私は個人的には、データベース内のバイナリファイル(画像、音声およびビデオのような特別のメディアファイル)を保存しないようにしてください。私は通常、データベースの画像にURLを保存しますが、画像データはAmazon S3 for Cloudfront CDNのように保存され、ユーザーのダウンロード速度が向上します。このhttp://django-storages.readthedocs.org/en/latest/のためにすでにdjangoアドオンがあります – Jared

答えて

0

私の編集ビュー: 我々はPILを使用せずに、カサンドラに画像を保存することができます。

def UploadImage(request): 
    if request.method == 'POST': 
     form = UsersForms.UserImage(request.POST, request.FILES) 
     if form.is_valid(): 
      try: 
       image_data=request.FILES['image'].read() 
      except IOError: 
       return HttpResponse("cannot convert %s"% request.FILES['image'].name) 
      connection.setup(['127.0.0.1:9160']) 
      UserImageModel.create(Email='[email protected]', image=image_data) 
      return HttpResponse(request.FILES['image'].name) 
    else: 
     form= UsersForms.UserImage() 
     return render_to_response('Users/uploadImage.html', {'form': form}, context_instance=RequestContext(request)) 
2

例外メッセージを見ると、AttributeError:encodeと表示されます。これは、コードパスのどこかで、何かのオブジェクトで "エンコード"と呼ばれ、見つからない属性(またはたいていはメソッド)を探していることを伝えています。

私はUserImage.imageのcqlengineに正しいダック型のオブジェクトを渡していないと思います。 PIL Imageオブジェクトを話す方法を知っていますか?疑わしい。私はcqlengineが典型的なpythonの文字列メソッド.encode(http://docs.python.org/2/library/stdtypes.html#str.encode)を探していると思います。 PILイメージを渡す代わりに、フォームの投稿から受け取った生のバイトだけを渡してみてください。

関連する問題