2013-07-17 24 views
6

Web sitem resimlerimi cassandra veritabanında saklamak istiyorum! Görüntünün baytlarını okumalı ve depolamalıyım. Benim için güzel bir kodun var mı? Python2.7, django framework ve cql-engine kullanıyorum!Cql motorunu kullanarak görüntüyü cassandra veritabanında Bayt alanı olarak nasıl depolarsınız?

1- Benim Modeli:

from cqlengine import columns 
from cqlengine.models import Model 

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

2- Benim Form:

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

3- Benim Görünüm:

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)) 

Bu

benim kodudur

Benim Şablon:

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

Rendered Şablon My HATA:

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 

senin fikrin nedir? Lütfen bana yol göster ...

+2

Ben şahsen ikili dosyaları veritabanında (resim, ses ve video gibi özel medya dosyalarını) tasarruf kaçınmaya çalışın. Genellikle URL'yi veritabanındaki görüntüye kaydederim, ancak görüntü verileri, kullanıcıların indirmelerini hızlandırmak için Cloudfront CDN ile Amazon S3 gibi bir yere kaydedilir. Bu http://django-storages.readthedocs.org/en/latest/ için zaten bir django eklentisi var. – Jared

cevap

0

Benim Düzenlendi Görünüm: Biz PIL kullanmadan cassandra görüntüyü saklayabilirsiniz:

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

Bir istisna mesajına bakarsanız, AttributeError: encode diyor. Bu size, bu kod yolunda bir yerde, bir şeyin bazı nesneler üzerinde "kodlama" adı verilen ve onu bulamayan bir özellik (veya büyük olasılıkla bir yöntem) aradığını anlatıyor.

UserImage.image için cqlengine'e doğru ördek yazılan nesneyi geçmediğinizden şüpheleniyorum. PIL Image nesnelerini nasıl konuştuğunu biliyor mu? Şüpheliyim. Ben cqlengine tipik python dize yöntemi .encode (http://docs.python.org/2/library/stdtypes.html#str.encode) arıyor. PIL görüntüsünü aktarmak yerine, form gönderiminden aldığınız ham baytı geçmeyi deneyin.

İlgili konular