首页 > 解决方案 > 如何在 Django 中从 MongoDB 提供图像文件

问题描述

我正在构建一个将图像文件存储在 mongodb GridFS 中的 Django 应用程序。

我使用 Djongo 处理数据库并按照此示例https://www.djongomapper.com/using-django-with-mongodb-gridfs/将图像存储到数据库。

现在我可以,目前通过管理页面,将图像上传到数据库,需要使用这样的 URL 访问:

http://127.0.0.1:8000/files/60fae4884db41b9ad761c8b0

现在我有这个urls.py

urlpatterns = [
    ...
    path('files/<str:fileid>', views.files, name='files'),
]

但在查看文件中,我不知道如何从数据库中检索图像:

@login_required
def files(request, fileid):

    return response

我搜索了 Djongo 和 Django 的文档,但找不到简单的方法。

注意:在主数据库集合中,仅存储图像文件名。在 gridfs 集合“文件”中存储了一个 ID(URL 中的那个)、图像名称(到主集合的唯一链接)和其他详细信息。在“块”集合中,有一个 ID、一个 files_ID(文件 ID 的外键)和二进制数据。

标签: djangomongodbgridfsdjongo

解决方案


您不应该使用 Django 提供文件,您需要设置MEDIA_URL并使其指向您的 Web 服务器,例如 NGINX 并使用 nginx-gridfs模块来提供文件。

这适用于所有类型的存储,提供静态文件不应该通过 Django 来完成,它是 Web 服务器的工作。

参考 检查“存储”部分下的警告


推荐阅读