Python中使用Minio實現(xiàn)圖像或視頻文件存儲的步驟
一、Minio的基本介紹
1.Minio是什么
Minio是一款開源的高性能對象存儲服務(wù)器,專門針對大規(guī)模數(shù)據(jù)存儲而設(shè)計。當(dāng)開發(fā)一個網(wǎng)站系統(tǒng)時,我們往往需要存儲許多的圖片或視頻信息,如果將這些文件信息直接存儲在本地數(shù)據(jù)庫中,那是十分低效且復(fù)雜的,隨著訪問量的增加,本地數(shù)據(jù)庫難以承載較大的數(shù)據(jù)量,可能會導(dǎo)致各種問題。因此,我們將選擇Minio來解決這一問題。
2.Minio的優(yōu)勢
作為一款云存儲服務(wù)工具,Minio具有廣泛的兼容性,支持在各種環(huán)境部署,包括物理服務(wù)器、虛擬機(jī)等等,并且它的技術(shù)文檔十分完善,使用起來是很簡單的。同時,相比于阿里云、百度云這些云存儲服務(wù)器,Minio是完全免費的。
二、使用步驟
1.啟動Minio
在成功下載Minio之后,進(jìn)入minio.exe文件所在目錄,用cmd加回車快速打開命令提示符。

輸入命令minio server ./data啟動Minio服務(wù),其中data是存放數(shù)據(jù)的文件夾名稱。

在瀏覽器中訪問Minio服務(wù)控制臺,輸入http://127.0.0.1:9000跳轉(zhuǎn)至如下頁面:

默認(rèn)賬號和密碼都為minioadmin,輸入完后點擊login進(jìn)入主頁面。
2.創(chuàng)建桶
點擊左邊Buckets菜單,并選擇右上角Create Bucket選項,創(chuàng)建一個名為test的桶,用來存放圖片或視頻文件數(shù)據(jù)。


3.在Python中使用Minio
3.1安裝并導(dǎo)入minio包
輸入命令:pip install minio進(jìn)行安裝
安裝完成后將包導(dǎo)入:
from minio import Minio, S3Error
3.2創(chuàng)建mino_utils工具類
1.配置Minio,包括訪問地址、端口、訪問秘鑰、密碼秘鑰和桶名
endpoint = "127.0.0.1:9000" access_key = "minioadmin" secret_key = "minioadmin" bucket_name = 'test'
2.創(chuàng)建一個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服務(wù)地址、端口、訪問密鑰和秘密密鑰
endpoint = "127.0.0.1:9000"
access_key = "minioadmin"
secret_key = "minioadmin"
bucket_name = 'test' #桶名
#創(chuàng)建一個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)后續(xù)可直接導(dǎo)入minio_utils工具類來使用里面的方法
三、操作演示
1.引入minio_utils工具類
from mino_utils import upload, getUrl
2.上傳視頻文件
在實際應(yīng)用中,我們可以對需要上傳的文件先隨機(jī)生成一個特有的文件名,這里通過上傳的時間來隨機(jī)生成一個文件名,然后把這個隨機(jī)文件名存放在本地數(shù)據(jù)庫中,方便之后直接通過該文件名來訪問文件。
import time
from hashlib import md5
fileName = md5(str(time.time()).encode("utf-8")).hexdigest() #隨機(jī)生成文件名
upload("./file/tennis.mp4", fileName)
print("success")運行結(jié)果如下:

再次打開Minio控制臺并刷新,發(fā)現(xiàn)test桶中存放該視頻文件,文件上傳成功!

3.獲取視頻文件
調(diào)用minio_utils工具類的方法,通過文件名直接獲取文件訪問的url。
url = getUrl("8a21e13cfa33a506634c90c2297b7e01")
print(url)結(jié)果如下:

Ctrl + 左鍵打開url,文件在瀏覽器中下載,成功打開該視頻文件!

總結(jié)
本文章向大家介紹了Minio這一款簡易的云存儲服務(wù)器,并講述了如何在Python中去使用Minio,實現(xiàn)了視頻文件的上傳和獲取。同時,本文章從實際開發(fā)的角度,通過Minio讓本地數(shù)據(jù)庫只存儲文件的名稱,而不是存儲整個文件,大大減少了本地數(shù)據(jù)庫存儲的壓力。Minio還有許多其他的功能,感興趣的同學(xué)可以自行去探索。
到此這篇關(guān)于Python中使用Minio實現(xiàn)圖像或視頻文件的存儲的文章就介紹到這了,更多相關(guān)Python Minio文件存儲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python的Flask項目中獲取請求用戶IP地址 addr問題
這篇文章主要介紹了Python的Flask項目中獲取請求用戶IP地址 addr問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-01-01
python Task在協(xié)程調(diào)用實例講解
在本篇文章里小編給大家整理了一篇關(guān)于python Task如何在協(xié)程調(diào)用的相關(guān)內(nèi)容,有興趣的朋友們可以參考下。2021-04-04
對web.py設(shè)置favicon.ico的方法詳解
今天小編就為大家分享一篇對web.py設(shè)置favicon.ico的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
tensorflow實現(xiàn)簡單的卷積網(wǎng)絡(luò)
這篇文章主要為大家詳細(xì)介紹了tensorflow實現(xiàn)簡單的卷積網(wǎng)絡(luò),使用的數(shù)據(jù)集是MNIST,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05
python代碼規(guī)范之異常,規(guī)則,函數(shù)返回值使用解讀

