You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

咨询2MB视频存入MongoDB的合适格式及服务端客户端实现方案

视频存储到MongoDB的可行方案

针对你的需求,视频存储到MongoDB主要有两种方案,适配不同大小的视频文件,客户端代码可沿用类似图片的POST上传逻辑,核心差异在服务端的存储处理:

1. 小视频(<16MB):直接存储二进制数据

和你存储图片的逻辑完全一致,MongoDB单文档支持最大16MB的二进制数据,只要视频文件不超过这个限制,直接以字节格式存储即可。

客户端代码修改(Locust)

仅需替换文件路径和字段名,逻辑和图片上传一致:

def training_task_video(self):
    if len(video_list):
        ran_num = random.randint(0, 7)
        time.sleep(ran_num)
        try:
            # 读取视频文件(二进制模式)
            with open(f"/Users/urooba/ramses/training_videos/{video_list[0]}", 'rb') as video:
                video_contents = video.read()
            data = {
                'event_name': 'VIDEO_UPLOAD',
            }
            file = {
                'input_video': video_contents
            }
            with self.lock:
                if len(video_list):
                    self.client.post(url=self.host, files=file, data=data)
                    del(video_list[0])

        except Exception as e:
            print(f"[EXCEPTION - VIDEO] {e}")

2. 大视频(≥16MB):使用GridFS分块存储

如果视频文件超过16MB,MongoDB单文档无法容纳,这时需要用GridFS——它会自动将大文件分割成多个256KB的块存储,同时维护一个元数据文档记录文件信息。

客户端代码

客户端无需额外改动,依然用上述POST上传逻辑,把视频以二进制形式发送即可。

服务端处理示例(Python + Flask + PyMongo)

服务端接收视频后,用GridFS写入MongoDB:

from flask import Flask, request
from pymongo import MongoClient
from gridfs import GridFS

app = Flask(__name__)
client = MongoClient('mongodb://localhost:27017/')
db = client['video_storage_db']
fs = GridFS(db)

@app.route('/upload-video', methods=['POST'])
def upload_video():
    event_name = request.form.get('event_name')
    video_file = request.files.get('input_video')
    
    # 将视频写入GridFS,可附加元数据(比如event_name)
    file_id = fs.put(video_file, filename=video_file.filename, event_name=event_name)
    return {'file_id': str(file_id), 'status': 'success'}, 200

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

方案选择建议

  • 若视频均小于16MB,优先选方案1,实现简单,和你现有图片存储逻辑统一;
  • 若存在大视频,必须用GridFS,避免MongoDB的单文档大小限制;
  • 后续读取视频时,方案1直接从文档中取出二进制数据返回,方案2通过GridFS的get(file_id)方法读取拼接块数据。

内容的提问来源于stack exchange,提问作者Urooba Shahid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 13:55:28