【MinIO】几个有用的方法

news2024/11/18 8:30:02

在windows总安装Minio

这是一篇不错的安装指南
进入网址
在这里插入图片描述
在Windows安装时,选择相应的exe文件下载,下载到本地后,使用如下的命令即可在前台启动:

minio.exe server D:\your_path

或者将该路径写进环境变量的path中,用来为minio指定数据存储路径。
执行成功的效果如下如所示:
在这里插入图片描述

在python中使用Minio

python中安装minio

pip install minio

promtp shell启动minio,注意该shell不能关闭

minio.exe server D:\MinIO  # 后面的路劲是存放数据的地址

浏览器打开127.0.0.1:9000
输入默认账户和密码minioadminminioadmin

获取bucket中的对象

通过list_objects获取Minio中的对象

objects = client.list_objects(bucket_name, prefix=None, recursive=True)
for obj in objects:
    print(obj.bucket_name, obj.object_name.encode('utf-8'), obj.last_modified,
           obj.etag, obj.size, obj.content_type) # 进一步查看object的属性

上传本地文件到Minio

通过fput_object方法可以将本地文件上传到Minio

# 上传文件,bucket_name 桶名称, object_name: 上传到桶中的完整的文件路径, file_path:文件本地所在完整路径
result = client.fput_object(bucket_name=bucket_name,object_name='data1/'+file_name,
   file_path=file_path+"/"+file_name)
print(result.object_name,result.bucket_name, result.etag)

从Minio下载图片到本地

通过fget_object方法可以将文件从Minio下载到本地

client.fget_object(
    'test', 'baike_knowledge/46c88e9e080efc4c0e8742e022130d7e/20231109112809770.jpeg', 'this.jpeg')

爬取图片url,并上传到Minio

使用request库爬取网络图片,并使用Minioupload_pictures()方法将数据上传到MinIO

import requests
from io import BytesIO
from minio import Minio
from minio.error import S3Error
from hashlib import md5
import datetime


minio = Minio(endpoint="127.0.0.1:9000",
              access_key='minioadmin',
              secret_key='minioadmin',
              secure=False)

def upload_pictures(client, source_url, pic_url, bucket_name, spider_name):
    try:
        response = requests.get(pic_url)  # crawling picture
        image = BytesIO(response.content) # change the picture to bytes type
        size = len(image.getvalue())  # calculate the object size
        page_md5 = md5(str(source_url).encode("utf-8")).hexdigest() #  use md5(url) as piece of file name
        timestamp = datetime.datetime.now().strftime("%Y%m%d%H%M%S%f")[:-3] # timestamp as part of object_name
        content_type = pic_url.split('.')[-1] # get picture type: jpg, png, jpeg etc.
        # Upload the image to MinIO server
        client.put_object(bucket_name=bucket_name, object_name=f"{spider_name}/{page_md5}/{timestamp}.{content_type}", data=image,
                          content_type=f"image/{content_type}", length=size)
        # when you extract data, you should not includ the bucket name in the whole path
        pic_path = f'{bucket_name}/{spider_name}/{page_md5}/{timestamp}.{content_type}'
        # logging.info(f'save picture to minio path {pic_path}')
        return pic_path
    except requests.exceptions.InvalidURL:
        print("无效的 URL")
    except requests.exceptions.HTTPError as e:
        print(f"HTTP 错误: {e}")
    except S3Error as err:
        print("Error occurred: ", err)
    except Exception as e:
        print(f"发生错误: {e}")
    return None

移除MinIO中size为0的object

from minio import Minio

minio = Minio(endpoint="127.0.0.1:9000",
              access_key='minioadmin',
              secret_key='minioadmin',
              secure=False)

def remove_zero_size(client, bucket_name):
    object = client.list_objects(bucket_name, prefix=None, recursive=True)
    for obj in object:
        print(obj.bucket_name, obj.object_name.encode('utf-8'), obj.last_modified,
               obj.etag, obj.size, obj.content_type) # 进一步查看object的属性
        if obj.size == 0:
            # Remove an object.
            client.remove_object(bucket_name, obj.object_name.encode('utf-8'))
remove_zero_size(minio, bucket_name='size')

函数说明 https://www.bookstack.cn/read/miniocookbookzh/24.md
https://blog.csdn.net/weixin_40547993/article/details/110682587

https://blog.csdn.net/quyingzhe0217/article/details/129727120
https://blog.csdn.net/Deaohst/article/details/128699370
https://www.python100.com/html/Q2I2IO5C25Z5.html
https://www.cnblogs.com/mian-1122/p/17463849.html
安装minio https://zhuanlan.zhihu.com/p/514794125
https://blog.csdn.net/m0_72838865/article/details/126599849
https://blog.csdn.net/LONG729564606/article/details/129331498
https://blog.csdn.net/feritylamb/article/details/126246293

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1251190.html

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

相关文章

新手如何买卖基金,基金投资基础入门

一、教程描述 本套基金教程,大小2.50G,共有13个文件。 二、教程目录 第01课:基金入门,学会投资其实不难.mp4 第02课:基金分类,琳琅满目清清楚楚.mp4 第03课:以稳取胜,稳健基金稳…

CSS水平居中与垂直居中的方法

当我们页面布局的时候&#xff0c;通常需要把某一个元素居中&#xff0c;这一篇文章为大家介绍一下居中的几种方法&#xff0c;本人文笔有限&#xff0c;请见谅&#xff01; 一.水平居中 行内元素水平居中的方法&#xff0c;我们使用text-align:center; <!DOCTYPE html&g…

市场被套牢,没有了解积累和分配,昂首资本一一介绍

很多投资者对市场中的积累和分配的概念不是很清楚&#xff0c;下面昂首资本将一一介绍。 积累意味着尽可能多地买入筹码&#xff0c;而不大幅抬高价格&#xff0c;直到在你买入时的价格水平上没有或几乎没有筹码。这种买入通常发生在市场熊市之后&#xff0c;此时有最佳买入价…

枚举与应用

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 枚举简介 枚举是一种特…

软件测试:超详细的Jmeter基础教程

JMeter 介绍&#xff1a; 一个非常优秀的开源的性能测试工具。 优点&#xff1a;你用着用着就会发现它的重多优点&#xff0c;当然不足点也会呈现出来。 从性能工具的原理划分 Jmeter工具和其他性能工具在原理上完全一致&#xff0c;工具包含4个部分&#xff1a; &#xff…

是否有无限提取的代理IP?作为技术你需要知道这些

最近有互联网行业的技术小伙伴问到&#xff0c;有没有可以无限提取的代理IP&#xff1f;就是比如我一秒钟提取几万、几十万次&#xff0c;或者很多台机器同时调用API提取链接&#xff0c;这样可以吗&#xff1f;看到这个问题&#xff0c;不禁沉思起来&#xff0c;其实理论上是存…

数据结构与算法编程题23

设计二叉树的双序遍历算法&#xff08;双序遍历是指对于二叉树的每一个结点来说&#xff0c;先访问这个结点&#xff0c;再按双序遍历它的左子树&#xff0c;然后再一次访问这个结点&#xff0c;接下来按双序遍历它的右子树&#xff09; #define _CRT_SECURE_NO_WARNINGS#inclu…

【点云surface】Poisson表面重建

1 介绍 Poisson表面重建算法是一种用于从点云数据生成平滑曲面模型的算法。它基于Michael Kazhdan等人在2006年发表的论文《Poisson surface reconstruction》。该算法通过将点云数据转换为体素表示&#xff0c;并利用Poisson方程来重建曲面。 该算法的基本原理是将点云数据转…

python基础教程:动态参数

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 Python的动态参数有两种&#xff0c;分别是*args和**kwargs&#xff0c; 这里面的关键是一个和两个星号的区别&#xff0c;而不是args和kwargs在名字上的区别&#…

微信小程序-跳转到另一个小程序

微信小程序-跳转到另一个小程序 微信小程序跳转到另一个小程序有一个条件:这两个小程序被同一个微信公众号关联&#xff0c;否则不能跳转&#xff0c;会报错。 官方文档 wx.navigateToMiniProgram({appId: wxa38r249405b957c6,path: pages/splash/index,//extraData: 需要传递…

Android : PopupWindow 悬浮框_简单应用

示例图&#xff1a; MainActivity.java package com.example.popupwindow;import androidx.appcompat.app.AppCompatActivity;import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.LayoutInflat…

浅谈STL中的分配器

分配器是STL中的六大部件之一&#xff0c;是各大容器能正常运作的关键&#xff0c;但是对于用户而言确是透明的&#xff0c;它似乎更像是一个幕后英雄&#xff0c;永远也不会走到舞台上来&#xff0c;观众几乎看不到它的身影&#xff0c;但是它又如此的重要。作为用户&#xff…

Vue组件的几种通信方式

这里写目录标题 Vue组件的几种通信&#xff08;数据传递&#xff09;方式非父子组件间通信&#xff08;Bus事件总线&#xff09;介绍实例 非父子通信-provide&inject1.作用2.场景3.语法4.注意 父子组件间的通信固定props属性名&#xff08;v-model&#xff09;介绍实例 不固…

【部署运维】docker:入门到进阶

0 前言 部署运维博客系列一共有三篇&#xff1a; 拥抱开源&#xff0c;将工作中的经验分享出来&#xff0c;尽量避免新手踩坑。 【部署运维】docker&#xff1a;入门到进阶 【部署运维】kubernetes&#xff1a;容器集群管理掌握这些就够了 【部署运维】pythonredisceleryd…

C++多态-虚函数

多态分为编译时多态和运行时多态。编译时多态就是在编译阶段就能绑定要执行的那个函 数。运行时多态要等到运行到调用的那条语句时&#xff0c;根据指针/引用所绑定的对象&#xff0c;来决定执行哪 个函数&#xff0c;我们要讲的虚函数就是运行时多态&#xff0c;是 C中非常重…

嵌入式的学习需要合理规划时间

低级的欲望放纵即可获得&#xff0c;高级的欲望只有克制才能达成。——卡耐基1、粉丝的误会 很多粉丝&#xff0c;问我&#xff0c; "胡老师我想报您的培训班。" ... 得知我知识业余时间写文章&#xff0c;紧接着又会问&#xff0c; "jg单位这么清闲啊&#…

带你理解H桥电路

H桥电路 文章目录 H桥电路前言一、H桥基本结构二、H桥原理二、控制模式三、MOS管H桥 前言 在做单片机控制小车的时候一定会用一个电机驱动板&#xff0c;这个电机驱动板是怎么做的呢&#xff0c;答案就是H桥&#xff0c;没学过电路的同学可能会问什么是H桥&#xff0c;这篇文章…

【c++哈夫曼树代码实现】

哈夫曼树是不定长编码方式&#xff0c;由于是将权值大的元素放在离根结点近的地方 &#xff0c;权值小的放在离根远的地方&#xff0c;哈夫曼树效率很高&#xff0c;并且一个编码不会以另一个编码作为前缀&#xff0c;避免了编码的歧义性&#xff0c;本文将带大家探索如何创建和…

SAP smartform 实现打印条形码

先在SE73里定义一个新的BARCODE&#xff0c;注意一定要用新的才可以&#xff0c;旧的是打印不出来的。 然后定义一个SMARTFORM的样式&#xff0c;把你定义的BARCODE放到字符样式里面去。 再做SMARTFORM就可以了&#xff0c;将需要作为条码的变量的格式选为该BARCODE格式&…