如何在 Django 中从 MongoDB 提供图像文件
Posted
技术标签:
【中文标题】如何在 Django 中从 MongoDB 提供图像文件【英文标题】:How to serve image files from MongoDB in Django 【发布时间】:2021-09-30 20:12:27 【问题描述】:我正在构建一个将图像文件存储在 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 的外键)和二进制数据。
【问题讨论】:
【参考方案1】:您不应该使用 Django 提供文件,您需要设置 MEDIA_URL
并使其指向您的 Web 服务器,例如nginx 和使用
nginx-gridfs 提供文件的模块。
这适用于所有类型的存储,提供静态文件不应该通过 Django 来完成,它是 Web 服务器的工作。
Reference 检查“存储”部分下的警告
【讨论】:
两个问题: 1- 我可以用 apache 做到这一点吗?因为它是我的网络服务器。 2- 当以这种方式访问文件时,我可以强制执行我在应用程序中使用的相同身份验证吗? 1- 不确定 Apache。 2-您可以使用 Nginx 模块 nginx.org/en/docs/http/ngx_http_secure_link_module.html 这将使请求转到 Django,后者将通过安全链接将其转发到 Nginx,该链接将在几秒钟后过期以上是关于如何在 Django 中从 MongoDB 提供图像文件的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中从 mongodb 更改 geojson (GeoJsonPolygon) 的编组?
如何在 Spring Boot 中从 Mongodb 读取集合数据并定期发布到 kafka 主题中