当前位置: 首页 > news >正文

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还有许多其他的功能,感兴趣的同学可以自行去探索。

http://www.lryc.cn/news/538125.html

相关文章:

  • Kubernetes-master 组件
  • 人形机器人 - 仿生机器人核心技术与大小脑
  • OpenAI 快速入门
  • nginx 实战配置
  • WebMvcConfigurer 介绍
  • java05(类、泛型、JVM、线程)---java八股
  • Python+appium实现自动化测试
  • Unity中如何判断URL是否为RTSP或RTMP流
  • 基于角色访问控制的UML 表示02
  • 【函数题】6-10 二分查找
  • 关于conda换镜像源,pip换源
  • DeepSeek与ChatGPT的全面对比
  • Spring AI发布!让Java紧跟AI赛道!
  • 基于CT107D单片机综合训练平台的秒表设计
  • opensuse [Linux] 系统挂在新的机械硬盘
  • 时间序列分析(四)——差分运算、延迟算子、AR(p)模型
  • 【CUDA】Triton
  • Windows环境搭建ES集群
  • langchain学习笔记之消息存储在内存中的实现方法
  • 怎么在智能合约中植入deepseek
  • 驱动开发系列37 - Linux Graphics 2D 绘制流程(二)- 画布创建和窗口关联
  • B. Longest Divisors Interval
  • 前端与后端的对接事宜、注意事项
  • 【第13章:自监督学习与少样本学习—13.2 少样本学习(FSL)与元学习(Meta-Learning)的基础理论与应用案例】
  • 函数防抖和节流
  • linux--关于linux文件IO(2) open、read、lseek、stat
  • 利用xtquant高效获取财务数据:量化分析的重要补充
  • Unity UI个人总结
  • Javascript的数据类型
  • Day3 25/2/16 SUN