Python 如何使用cql引擎将图像存储为cassandra数据库中的字节字段?
我想在cassandra数据库中存储我的网站图像!我必须读取和存储图像字节。你有好的密码给我吗?我正在使用python2.7、django框架和cql引擎 这是我的代码: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
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插件用于此