Python中使用Minio实现图像或视频文件存储的步骤

 更新时间:2025年02月17日 09:39:22   作者:HHUCESTA  
本文章向大家介绍了Minio这一款简易的云存储服务器,并讲述了如何在Python中去使用Minio,实现了视频文件的上传和获取,感兴趣的朋友一起看看吧

一、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 os
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)

4.再编写一个获取文件的方法,输入文件名,返回文件访问的url,这里给url添加了一天的过期时间

from datetime import timedelta
def getUrl(file_name):
    expires = timedelta(days=1)
    try:
        url = client.presigned_get_object(bucket_name, file_name, expires=expires)
        return url
    except 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 url
    except Exception as err:
        print(err)

后续可直接导入minio_utils工具类来使用里面的方法

三、操作演示

1.引入minio_utils工具类

from mino_utils import upload, getUrl

2.上传视频文件

在实际应用中,我们可以对需要上传的文件先随机生成一个特有的文件名,这里通过上传的时间来随机生成一个文件名,然后把这个随机文件名存放在本地数据库中,方便之后直接通过该文件名来访问文件。

import time
from hashlib import md5
fileName = 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实现图像或视频文件的存储的文章就介绍到这了,更多相关Python Minio文件存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python爬虫指南之xpath实例解析(附实战)

    python爬虫指南之xpath实例解析(附实战)

    在进行网页抓取的时候,分析定位html节点是获取抓取信息的关键,目前我用的是lxml模块,下面这篇文章主要给大家介绍了关于python爬虫指南之xpath实例解析的相关资料,需要的朋友可以参考下
    2022-01-01
  • Python结合Window计划任务监测邮件的示例代码

    Python结合Window计划任务监测邮件的示例代码

    这篇文章主要介绍了Python结合Window计划任务监测邮件的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • tensorflow如何将one_hot标签和数字(整数)标签进行相互转化

    tensorflow如何将one_hot标签和数字(整数)标签进行相互转化

    这篇文章主要介绍了tensorflow如何将one_hot标签和数字(整数)标签进行相互转化问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Python实现发票自动校核微信机器人的方法

    Python实现发票自动校核微信机器人的方法

    这篇文章主要介绍了Python实现发票自动校核微信机器人的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Python中的TCP socket写法示例

    Python中的TCP socket写法示例

    最近在学习脚本语言python,所以下面这篇文章主要给大家介绍了关于Python中TCP socket写法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们一起来看看吧
    2018-05-05
  • Python selenium find_element()示例详解

    Python selenium find_element()示例详解

    selenium定位元素的函数/方法可以分为两类:find_element及find_elements,下面这篇文章主要给大家介绍了关于Python selenium find_element()的相关资料,需要的朋友可以参考下
    2022-07-07
  • Python使用列表推导式快速生成列表

    Python使用列表推导式快速生成列表

    这篇文章主要介绍了Python使用列表推导式快速生成列表,列表推导式是Python构建列表list的一种快捷方式,可以使用简洁的代码就创建出一个列表,需要的朋友可以参考下
    2023-07-07
  • python数组转换为矩阵的方法实现

    python数组转换为矩阵的方法实现

    本文主要介绍了python数组转换为矩阵的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • python数据分析工具之 matplotlib详解

    python数据分析工具之 matplotlib详解

    对于 Python 来说,matplotlib 是最著名的绘图库,它主要用于二维绘图,当然也可以进行简单的三维绘图。这篇文章主要介绍了python数据分析工具之 matplotlib的相关知识,需要的朋友可以参考下
    2020-04-04
  • Python使用Numpy模块读取文件并绘制图片

    Python使用Numpy模块读取文件并绘制图片

    这篇文章主要介绍了Python使用Numpy模块读取文件并绘制图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论