如何在django开发环境中从gridfs提供文件?

时间:2013-02-08 14:57:11

标签: django mongoengine gridfs

我需要在我的django + mongoengine项目中从GridFS提供文件。是否有开箱即用的解决方案?

2 个答案:

答案 0 :(得分:0)

@login_required def view_posts(request):     post_data = Post.objects(user = request.user)

return render(request, 'posts.html', { 'post_data' : post_data } )

@login_required def show_image(request,_md5):     post_data = Post.objects(user = request.user)

image = None
for post in post_data:
    if _md5 == post.image.md5:
        image = post.image.read()
        break

return HttpResponse(image.read(), content_type="image/" + post.image.format)

答案 1 :(得分:-1)

我不应该立即知道如何在Django中这样做,但这就是我最终要做的事情。

我在views.py中创建了一个show_image函数,该函数传递了感兴趣的图像的md5并将其作为HttpResponse返回。在这种情况下,发布数据由用户过滤,但一般情况下您可能不需要。另外我的show_image代码是非常低效的,我相当确定有使用mongoengine进行查询的方法,这比迭代查找md5的图像更有效。 urls.py传递图像的md5,然后调用show_image并返回标记的HttpResponse / url需求。

<强> models.py

from mongoengine import *

class Post(Document):
    image = ImageField()

<强> views.py

@login_required
def view_posts(request):
    post_data = Post.objects(user=request.user)

    return render(request, 'posts.html', { 'post_data' : post_data } )

@login_required
def show_image(request, _md5):
    post_data = Post.objects(user=request.user)

    image = None
    for post in post_data:
        if _md5 == post.image.md5:
            image = post.image.read()
            break

    return HttpResponse(image, content_type="image/" + post.image.format)

<强> urls.py

    url(r'posts/images/(?P<_md5>\w+)$', 'project.views.show_image', name='show_image'),

<强>模板/ posts.html

<div id="posts">
    {% for post in post_data %}
    <dl class="dl-horizontal">
        <dd>{{ post.image.uploadDate }}</dd>
        <img src="images/{{ post.image.md5 }}" />
    </dl>
    {% endfor %}
</div>