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将历史消息存储在内存中的实现方法。 背景 在与大模型交互过程中,经常出现消息管理方…...
【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
