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.mzph.cn/web/69935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[JVM篇]虚拟机性能监控、故障处理工具

虚拟机性能监控、故障处理工具 基础故障处理工具 jps(JVM Peocess Status Tool - 虚拟机进程状况工具) jstat(JVM Statistics Monitoring Too - 虚拟机统计信息监视工具) jinfo( Configuration info for Java - Java配置信息工具) jmap(Memory Map for…

【数据结构】(9) 优先级队列(堆)

一、优先级队列 优先级队列不同于队列,队列是先进先出,优先级队列是优先级最高的先出。一般有两种操作:返回最高优先级对象,添加一个新对象。 二、堆 2.1、什么是堆 堆也是一种数据结构,是一棵完全二叉树&#xff0c…

快速设置 Docker 网络代理配置

Docker Client - 代理访问远程的 Docker Daemon 在 Client 端设置代理其实就是设置 Linux 系统的代理,从而让系统的命令行可以通过代理连接到外部的网络。一般只需要配置 HTTP_PROXY 与 HTTPS_PROXY 这两个即可。 临时生效: 在命令行中执行下面的命令&…

Vript-Hard——一个基于高分辨率和详细字幕的视频理解算法

一、概述 多模态学习的最新进展促进了对视频理解和生成模型的研究。随之而来的是,对高分辨率视频和详细说明所建立的高质量数据集的需求激增。然而,由于时间因素的影响,视频与文本的配对不像图像那样容易。准备视频和文本配对是一项困难得多…

记录阿里云CDN配置

网站接入CDN全流程,共4步!-阿里云开发者社区 1、开通阿里云CDN服务 2、添加加速域名 3、验证域名归属权 4、域名添加CDN生成的CNAME解析 按照官网描述增加。细节点: 1. 域名和泛域名区别 2.开启https,要用nginx的证书,和项…

FFmpeg源码:url_find_protocol函数分析

一、url_find_protocol函数的定义 url_find_protocol函数定义在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的源文件libavformat/avio.c中: static const struct URLProtocol *url_find_protocol(const char *filename) {const URLProt…

DeepSeek 助力 Vue 开发:打造丝滑的无限滚动(Infinite Scroll)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

【区块链】零知识证明基础概念详解

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 零知识证明基础概念详解引言1. 零知识证明的定义与特性1.1 基本定义1.2 三个核心…

蓝桥杯篇---IAP15F2K61S2串口

文章目录 前言简介串口通信的基本参数1.波特率2.数据位3.停止位4.校验位 串口相关寄存器1.SCON2.SBUF3.PCON4.TMOD5.TH1/TL1 串口使用步骤1.配置波特率2.配置串口模式3.使能串口中断4.发送数据5.接收数据6.处理中断 示例代码:串口发送与接收示例代码:串口…

「vue3-element-admin」Vue3 + TypeScript 项目整合 Animate.css 动画效果实战指南

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …

MyBatis:动态SQL高级标签使用方法指南

一、引言 目前互联网大厂在搭建后端Java服务时,常使用Springboot搭配Mybatis/Mybatis-plus的框架。Mybatis/Mybatis-plus之所以能成为当前国内主流的持久层框架,与其本身的优点有关:支持定制动态 SQL、存储过程及高级映射,简化数…

untiy3D 让角色动起来,角色动画的使用

1.untiy 商店下载动画模型 2.导入项目 模型拖入到场景中 3.创建动画器控制器 4.动画控制器挂载到plarer上 5.把动画idle和pickup拖入到动画器 6.右键动画创建过渡效果(Make Transition) 6.设置参数用条件控制 7.当选中参数时启动过渡 运行效果 119 (二)用脚本控制动画…

XXL-Job入门

XXL-Job入门 什么是xxl-job? ​ xxl-job是一个分布式的任务调度平台,其核心设计目标是:学习简单、开发迅速、轻量级、易扩展,现在已经开放源代码并接入多家公司的线上产品线,开箱即用。xxl是xxl-job的开发者…

Linux 基于共享内存的循环队列实现

Linux 基于共享内存的循环队列实现 Linux 基于共享内存的循环队列实现一、共享内存与循环队列基础1.1 共享内存特性1.2 循环队列优势 二、系统关键技术分析2.1 共享内存操作APIshmget() 创建共享内存shmat() 映射共享内存 2.2 模板类设计要点 三、循环队列核心方法实现3.1 初始…

【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十九节】

ISO 14229-1:2023 UDS诊断服务测试用例全解析(ClearDiagnosticInformation_0x84服务) 作者:车端域控测试工程师 更新日期:2025年02月14日 关键词:UDS协议、0x84服务、清除诊断信息、ISO 14229-1:2023、ECU测试 一、服…

盛铂科技 SMF106 低相位噪声贴片式频率综合器模块

在现代通信和电子设备领域,频率综合器作为关键组件,其性能优劣直接影响系统的整体表现。盛铂科技的 SMF106 低相位噪声贴片式频率综合器,以其卓越的性能和独特设计,成为众多高性能系统的选择。 一、频率覆盖范围广,步进…

Java语言在微服务架构中的应用研究

Java语言在微服务架构中的应用研究 微服务架构是现代软件系统中一种重要的设计模式,它通过将单一的应用程序拆解成多个小型、独立的服务来增强系统的可扩展性、灵活性和可维护性。Java作为一种成熟的编程语言,在微服务架构的实现中发挥了重要作用。本文…

深度解析前端性能优化:策略与实践

在当今数字化时代,前端性能对于用户体验和业务成功至关重要。缓慢加载的页面会导致用户流失,而高效的前端性能则能提升用户满意度、转化率和品牌形象。本文将深入探讨前端性能优化的关键策略与实践,帮助开发者打造快速响应的优质 Web 应用。 一、资源加载优化 1. 压缩与合…

Mybatis-扩展功能

逻辑删除乐观锁 MyBatisPlus从入门到精通-3(含mp代码生成器) Db静态工具类 Spring依赖循环问题 代码生成器 MybatisPlus代码生成器 枚举处理器 我们这里用int来存储状态 需要注解,很不灵活 希望用枚举类来代替这个Integer 这样的话我…

请解释设备像素、CSS 像素、设备独立像素、DPR、PPI 之间的区别?

设备像素(Device Pixels) 定义:设备像素,也称为物理像素,是屏幕上能够显示的最小物理单位。每个设备像素代表屏幕上的一个点,用于显示颜色。 代码示例: console.log(window.screen.width); /…