【问题标题】:Get image by ObjectId instead of image_name in MongoDB在 MongoDB 中通过 ObjectId 而不是 image_name 获取图像
【发布时间】:2019-10-08 00:42:00
【问题描述】:

在我的烧瓶应用程序中,我试图检索存储在 MongoDB GridFS 中的图像。但是,我能找到的唯一工具是mongo.send_file(filename),而且这个函数似乎只支持使用文件名获取图像。

由于我有同名的不同图像,我想知道是否有办法使用图像文件的唯一 ObjectId 检索图像?

【问题讨论】:

    标签: mongodb flask


    【解决方案1】:

    我也一直在处理这个问题。我求助于修改烧瓶 API 上的 send_file 函数。看看我在这里做了什么:

    from flask import current_app, request
    from werkzeug.wsgi import wrap_file
    
    from bson.objectid import ObjectId
    from gridfs import GridFS, NoFile
    
    
    def retrieve_image(file_id, mongo):
        storage = GridFS(mongo.db, "fs")
    
        try:
            fileobj = storage.get(file_id=ObjectId(file_id))
        except NoFile:
            #404
            print()
    
            # mostly copied from flask/helpers.py, with
            # modifications for GridFS
        data = wrap_file(request.environ, fileobj, buffer_size=1024 * 255)
        response = current_app.response_class(
            data,
            mimetype=fileobj.content_type,
            direct_passthrough=True,
            )
        response.content_length = fileobj.length
        response.last_modified = fileobj.upload_date
        response.set_etag(fileobj.md5)
        response.cache_control.max_age = 31536000
        response.cache_control.public = True
        response.make_conditional(request)
        return response

    函数中的Mongo是flask_pymongo对象。让我知道我是否可以解决任何问题!

    【讨论】:

      猜你喜欢
      • 2018-05-22
      • 2014-10-11
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多