Python中使用Minio实现图像或视频文件的存储
目录
- 一、Minio的基本介绍
- 1.Minio是什么
- 2.Minio的优势
- 二、使用步骤
- 1.启动Minio
- 2.创建桶
- 3.在Python中使用Minio
- 3.1安装并导入minio包
- 3.2创建mino_utils工具类
- 三、操作演示
- 1.引入minio_utils工具类
- 2.上传视频文件
- 3.获取视频文件
- 总结
一、Minio的基本介绍
1.Minio是什么
Minio是一款开源的高性能对象存储服务器,专门针对大规模数据存储而设计。当开发一个网站系统时,我们往往需要存储许多的图片或视频信息,如果将这些文件信息直接存储在本地数据库中,那是十分低效且复杂的,随着访问量的增加,本地数据库难以承载较大的数据量,可能会导致各种问题。因此,我们将选择Minio来解决这一问题。
2.Minio的优势
作为一款云存储服务工具,Minio具有广泛的兼容性,支持在各种环境部署,包括物理服务器、虚拟机等等,并且它的技术文档十分完善,使用起来是很简单的。同时,相比于阿里云、百度云这些云存储服务器,Minio是完全免费的。
二、使用步骤
1.启动Minio
在成功下载Minio之后,进入minio.exe文件所在目录,用cmd加回车快速打开命令提示符。

输入命令minio server ./data启动Minio服务,其中data是存放数据的文件夹名称。

在浏览器中访问Minio服务控制台,输入http://127.0.0.1:9000跳转至如下页面:

默认账号和密码都为minioadmin,输入完后点击login进入主页面。
2.创建桶
点击左边Buckets菜单,并选择右上角Create Bucket选项,创建一个名为test的桶,用来存放图片或视频文件数据。

3.在Python中使用Minio
3.1安装并导入minio包
输入命令:pip install minio进行安装
安装完成后将包导入:
from minio import Minio, S3Error
3.2创建mino_utils工具类
1.配置Minio,包括访问地址、端口、访问秘钥、密码秘钥和桶名
endpoint = "127.0.0.1:9000"
access_key = "minioadmin"
secret_key = "minioadmin"
bucket_name = 'test'
2.创建一个Minio实例对象
client = Minio(endpoint=endpoint,access_key=access_key,secret_key=secret_key,secure=False
)
3.编写上传文件功能的方法,输入文件路径和文件名,将上传的文件存入test桶中
import osdef upload(file_path,file_name):try:with open(file_path, 'rb') as file_data:client.put_object(bucket_name, file_name, file_data, length=os.path.getsize(file_path))print(file_name)except S3Error as err:print(err)
4.再编写一个获取文件的方法,输入文件名,返回文件访问的url,这里给url添加了一天的过期时间
from datetime import timedeltadef getUrl(file_name):expires = timedelta(days=1)try:url = client.presigned_get_object(bucket_name, file_name, expires=expires)return urlexcept Exception as err:print(err)
工具类minio_utils的完整代码如下:
import os
from datetime import timedelta
from minio import Minio, S3Error# MinIO服务地址、端口、访问密钥和秘密密钥
endpoint = "127.0.0.1:9000"
access_key = "minioadmin"
secret_key = "minioadmin"
bucket_name = 'test' #桶名#创建一个Minio实例对象
client = Minio(endpoint=endpoint,access_key=access_key,secret_key=secret_key,secure=False
)#上传文件
def upload(file_path,file_name):try:with open(file_path, 'rb') as file_data:client.put_object(bucket_name, file_name, file_data, length=os.path.getsize(file_path))print(file_name)except S3Error as err:print(err)#通过文件名获得文件访问的url
def getUrl(file_name):expires = timedelta(days=1)try:url = client.presigned_get_object(bucket_name, file_name, expires=expires)return urlexcept Exception as err:print(err)
后续可直接导入minio_utils工具类来使用里面的方法
三、操作演示
1.引入minio_utils工具类
from mino_utils import upload, getUrl
2.上传视频文件
在实际应用中,我们可以对需要上传的文件先随机生成一个特有的文件名,这里通过上传的时间来随机生成一个文件名,然后把这个随机文件名存放在本地数据库中,方便之后直接通过该文件名来访问文件。
import time
from hashlib import md5fileName = md5(str(time.time()).encode("utf-8")).hexdigest() #随机生成文件名
upload("./file/tennis.mp4", fileName)
print("success")
运行结果如下:

再次打开Minio控制台并刷新,发现test桶中存放该视频文件,文件上传成功!

3.获取视频文件
调用minio_utils工具类的方法,通过文件名直接获取文件访问的url。
url = getUrl("8a21e13cfa33a506634c90c2297b7e01")
print(url)
结果如下:

Ctrl + 左键打开url,文件在浏览器中下载,成功打开该视频文件!

总结
本文章向大家介绍了Minio这一款简易的云存储服务器,并讲述了如何在Python中去使用Minio,实现了视频文件的上传和获取。同时,本文章从实际开发的角度,通过Minio让本地数据库只存储文件的名称,而不是存储整个文件,大大减少了本地数据库存储的压力。Minio还有许多其他的功能,感兴趣的同学可以自行去探索。
相关文章:
Python中使用Minio实现图像或视频文件的存储
目录 一、Minio的基本介绍1.Minio是什么2.Minio的优势 二、使用步骤1.启动Minio2.创建桶3.在Python中使用Minio3.1安装并导入minio包3.2创建mino_utils工具类 三、操作演示1.引入minio_utils工具类2.上传视频文件3.获取视频文件 总结 一、Minio的基本介绍 1.Minio是什么 Mini…...
Kubernetes-master 组件
以下是Kubernetes Master Machine的组件。 etcd 它存储集群中每个节点可以使用的配置信息。它是一个高可用性键值存储,可以在多个节点之间分布。只有Kubernetes API服务器可以访问它,因为它可能具有一些敏感信息。这是一个分布式键值存储,所…...
人形机器人 - 仿生机器人核心技术与大小脑
以下是针对仿生机器人核心技术的结构化总结,涵盖通用核心技术与**“大脑-小脑”专用架构**两大方向: 一、机器人通用核心技术 这些技术是仿生机器人实现功能的基础,与生物体的“身体能力”对应: 1. 感知与交互技术 多模态传感器融合 视觉:3D视觉(如RGB-D相机)、动态目…...
OpenAI 快速入门
文章来源:OpenAI开发者平台 | OpenAI开发文档|OpenAI中文官方文档|ChatGPT中文版|ChatGPT教程 开发人员快速入门 了解如何发出您的第一个 API 请求。 OpenAI API 为最先进的 AI 模型提供了一个简单的接口,用于自然语言处理、图像生成、语义搜索和语音识…...
nginx 实战配置
一、配置一个默认80端口的,静态页面,路径是path1。 http://192.168.0.111/path1 , /path1路径指向linux的/data/index1.html vi /data/nginx-1.24.0/conf/nginx.conf 文件添加以下配置 location /path1 { alias /data/…...
WebMvcConfigurer 介绍
WebMvcConfigurer 介绍 1. 什么是WebMvcConfigurer 介绍2. WebMvcConfigurer接口常用的方法3. 使用WebMvcConfigurer实现跨域4. 使用WebMvcConfigurer配置拦截器5. 使用WebMvcConfigurer配置静态资源5.1 配置外部目录(本地文件系统)详细解释 6. 使用 Web…...
java05(类、泛型、JVM、线程)---java八股
类 Java中有哪些类加载器 JDK自带有三个类加载器:bootstrap ClassLoader、ExtClassLoader、AppClassLoader。 ●BootStrapClassLoader是ExtClassLoader的父类加载器,默认负责加载%JAVA_HOME%lib下的jar包和class文件。 ●ExtClassLoader是AppClassLoade…...
Python+appium实现自动化测试
目录 一、工具与环境准备 二、开始测试 1、插上手机,打开usb调试,选中文件传输,我这里用华为手机为例 2、启动Appium Server GUI编辑 3、启动 Inspector Session 4、录制脚本 使用Python和Appium进行自动化测试是一种常见的移动应用…...
Unity中如何判断URL是否为RTSP或RTMP流
技术背景 如何在Unity中判断一个字符串URL是否是RTSP或RTMP流。首先,RTSP通常以“rtsp://”开头,而RTMP则是“rtmp://”或者有时是“rtmps://”用于安全连接。 接下来,如何在C#中进行字符串的检查。最简单的方法应该是检查URL是否以这些协议…...
基于角色访问控制的UML 表示02
一个用户可以成为很多角色的成员,一个角色可以有许多用户。类似地,一个角色可以有多个权限,同一个权限可以被指派给多个角色。每个会话把一个用户和可能的许多角色联系起来。一个用户在激发他或她所属角色的某些子集时,建立了一个…...
【函数题】6-10 二分查找
6-10 二分查找 1 题目原文2 思路解析2.1 基本二分查找算法2.2 常用二分模板2.2.1 第一个大于等于目标值的元素下标2.2.2 第一个大于目标值的元素下标2.2.3 最后一个小于等于目标值的元素下标2.2.3 最后一个小于目标值的元素下标2.2.4 小结 3 代码实现3.1 本题代码实现3.1.1 递归…...
关于conda换镜像源,pip换源
目录 1. 查看当前下载源2. 添加镜像源2.1清华大学开源软件镜像站2.2上海交通大学开源镜像站2.3中国科学技术大学 3.删除镜像源4.删除所有镜像源,恢复默认5.什么是conda-forge6.pip换源 1. 查看当前下载源 conda config --show channels 如果发现多个 可以只保留1个…...
DeepSeek与ChatGPT的全面对比
在人工智能(AI)领域,生成式预训练模型(GPT)已成为推动技术革新的核心力量。OpenAI的ChatGPT自发布以来,凭借其卓越的自然语言处理能力,迅速占据市场主导地位。然而,近期中国AI初创公…...
Spring AI发布!让Java紧跟AI赛道!
1. 序言 在当今技术发展的背景下,人工智能(AI)已经成为各行各业中不可忽视的重要技术。无论是在互联网公司,还是传统行业,AI技术的应用都在大幅提升效率、降低成本、推动创新。从智能客服到个性化推荐,从语…...
基于CT107D单片机综合训练平台的秒表设计
1. 项目简介 在CT107D单片机综合训练平台上,利用定时器T0、数码管模块和2个独立按键(J5的2-3短接),设计一个具有清零、暂停、启动功能的秒表。秒表显示格式为:分-秒-0.05秒(即50ms),…...
opensuse [Linux] 系统挂在新的机械硬盘
opensuse [Linux] 系统挂在新的机械硬盘 需求描述 自用电脑型号如下: 电脑:Precision Tower 7810 (Dell Inc.) CPU : Intel Xeon CPU E5-2686 v4 2.30GHz GPU: NVIDIA GeForce GTX 1070 Linux版本:Linux version 6.…...
时间序列分析(四)——差分运算、延迟算子、AR(p)模型
此前篇章: 时间序列分析(一)——基础概念篇 时间序列分析(二)——平稳性检验 时间序列分析(三)——白噪声检验 一、差分运算 差分运算的定义:差分运算是一种将非平稳时间序列转换…...
【CUDA】Triton
【CUDA】Triton 1. CUDA 与 Triton 的基本区别 CUDA 编程模型: 在传统的 CUDA 编程中,CUDA 是标量程序,带有阻塞线程(blocked threads)。 标量程序(Scalar Program):表示我们直接…...
Windows环境搭建ES集群
搭建步骤 下载安装包 下载链接:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.27-windows-x86_64.zip 解压 解压并复制出3份 es-node1配置 config/elasticsearch.yml cluster.name: xixi-es-win node.name: node-1 path.data: D:\\wor…...
langchain学习笔记之消息存储在内存中的实现方法
langchain学习笔记之消息存储在内存中的实现方法 引言背景消息存储在内存的实现方法消息完整存储:完整代码 引言 本节将介绍 langchain \text{langchain} langchain将历史消息存储在内存中的实现方法。 背景 在与大模型交互过程中,经常出现消息管理方…...
DellFanManagement终极指南:戴尔笔记本风扇智能控制解决方案
DellFanManagement终极指南:戴尔笔记本风扇智能控制解决方案 【免费下载链接】DellFanManagement A suite of tools for managing the fans in many Dell laptops. 项目地址: https://gitcode.com/gh_mirrors/de/DellFanManagement DellFanManagement是一款专…...
如何突破TIDAL平台限制,高效构建24-bit高解析度个人音乐库?
如何突破TIDAL平台限制,高效构建24-bit高解析度个人音乐库? 【免费下载链接】tidal-dl-ng TIDAL Media Downloader Next Generation! Up to HiRes / TIDAL MAX 24-bit, 192 kHz. 项目地址: https://gitcode.com/gh_mirrors/ti/tidal-dl-ng TIDAL …...
Python迷宫寻路实战:用DFS和BFS分别找出所有路径和最短路径(附完整代码)
Python迷宫寻路实战:深度优先与广度优先算法的本质差异 迷宫寻路问题是理解算法思维的经典案例。第一次接触这个问题时,我被同一个迷宫居然能找出多条路径的现象所吸引——这背后隐藏着两种截然不同的搜索策略:深度优先搜索(DFS)和广度优先搜…...
2026办公革命:Gemini3.1Pro一键生成周报会议纪要
很多团队在 2026 年都遇到一个同样的效率问题:资料明明都在,但“整理成可用的周报、会议纪要、行动项”需要反复复制粘贴、改措辞、再统一格式,时间花在了低价值劳动上。于是,越来越多人开始用 AI 做“草稿型文档生成”。在我近期…...
从CentOS迁移到国产系统?手把手教你用U盘安装统信UOS服务器版1060e
从CentOS迁移到统信UOS服务器版的完整实践指南 在开源生态变革的浪潮中,许多企业正面临从CentOS向替代方案迁移的技术挑战。统信UOS服务器版作为国产操作系统的代表之一,凭借其良好的硬件兼容性、完善的安全机制和本地化支持,正成为越来越多…...
d3dxSkinManage新手必读:5分钟掌握3DMigoto皮肤Mod管理技巧
d3dxSkinManage新手必读:5分钟掌握3DMigoto皮肤Mod管理技巧 【免费下载链接】d3dxSkinManage 3dmigoto skin mods manage tool 项目地址: https://gitcode.com/gh_mirrors/d3/d3dxSkinManage 还在为3DMigoto皮肤Mod管理而烦恼吗?想轻松管理多个游…...
魔兽争霸3终极优化解决方案:让经典游戏在现代电脑上流畅运行
魔兽争霸3终极优化解决方案:让经典游戏在现代电脑上流畅运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在Windows 10…...
初学Python者跟随教程调用Taotoken API完成第一个AI对话程序
初学Python者跟随教程调用Taotoken API完成第一个AI对话程序 1. 准备工作 在开始编写代码之前,需要完成几个必要的准备工作。首先访问Taotoken平台注册账号并获取API密钥。注册过程简单快捷,只需提供基本信息和验证邮箱即可。登录后,在控制…...
告别模拟器:Windows上直接运行APK的终极解决方案
告别模拟器:Windows上直接运行APK的终极解决方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 想在Windows电脑上直接运行安卓应用,不再需要笨…...
告别手动建模!用EPLAN P8导入STEP文件,5分钟搞定威图机柜3D模型
告别手动建模!用EPLAN P8导入STEP文件,5分钟搞定威图机柜3D模型 在电气工程设计领域,时间就是竞争力。传统手动创建机柜3D模型的过程往往需要数小时甚至更长时间,从基础框架搭建到每个安装板的精确定位,工程师们不得不…...
