【问题标题】:How to store an image as a Bytes field in cassandra database using cql engine?如何使用 cql 引擎将图像作为字节字段存储在 cassandra 数据库中?
【发布时间】:2013-07-16 14:29:39
【问题描述】:

我想将我的网站图像存储在 cassandra 数据库中!我必须读取和存储图像字节。你有一个不错的代码给我吗?我正在使用python2.7,django框架和cql-engine!

这是我的代码:

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

你的想法是什么?请指导我...

【问题讨论】:

  • 我个人尽量避免在数据库中保存二进制文件(特别是图像、音频和视频等媒体文件)。我通常将 url 保存到数据库中的图像中,但图像数据保存在 Amazon S3 等带有 Cloudfront CDN 的地方,以加快用户的下载速度。这个django-storages.readthedocs.org/en/latest 已经有一个 django 插件了

标签: python django python-2.7 cassandra cql3


【解决方案1】:

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

我怀疑您没有将正确的鸭子类型对象传递给 cqlengine 的 UserImage.image。它知道如何说 PIL Image 对象吗?我对此表示怀疑。我敢打赌 cqlengine 正在寻找典型的 python 字符串方法 .encode (http://docs.python.org/2/library/stdtypes.html#str.encode)。不要传递 PIL 图像,而是只传递从表单发布中收到的原始字节。

【讨论】:

    【解决方案2】:

    我的编辑视图: 我们可以在不使用 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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 2012-02-21
      • 2022-06-11
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      相关资源
      最近更新 更多