python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python Minio文件存储

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

作者: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文件存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文