Python 如何使用cql引擎将图像存储为cassandra数据库中的字节字段?

Python 如何使用cql引擎将图像存储为cassandra数据库中的字节字段?,python,django,python-2.7,cassandra,cql3,Python,Django,Python 2.7,Cassandra,Cql3,我想在cassandra数据库中存储我的网站图像!我必须读取和存储图像字节。你有好的密码给我吗?我正在使用python2.7、django框架和cql引擎 这是我的代码: AttributeError at /uploadImage encode Request Method: POST Request URL: http://127.0.0.1:8000/uploadImage Django Version: 1.5.1 Exception Type: AttributeError Ex

我想在cassandra数据库中存储我的网站图像!我必须读取和存储图像字节。你有好的密码给我吗?我正在使用python2.7、django框架和cql引擎

这是我的代码:

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
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='ebrahimi.omid69@gmail.com', 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 %}

你的想法是什么?请引导我…

如果您看到收到的异常消息,它会显示AttributeError:encode。这告诉您,在代码路径的某个地方,有东西正在某个对象上查找名为“encode”的属性(或者很可能是方法),但没有找到它


我怀疑您没有将正确的duck类型对象传递给UserImage.image的cqlengine。它知道如何说出PIL图像对象吗?我对此表示怀疑。我打赌cqlengine正在寻找典型的python字符串方法.encode()。不要传递PIL图像,尝试只传递从表单发布收到的原始字节。

我的编辑视图: 我们可以在不使用PIL的情况下将图像存储在cassandra中:

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='ebrahimi.omid69@gmail.com', 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))

我个人尽量避免在数据库中保存二进制文件(特别是图像、音频和视频等媒体文件)。我通常将图像的url保存在数据库中,但图像数据保存在类似AmazonS3的地方,并带有CloudFrontCDN,以加快用户的下载速度。已经有一个django插件用于此