安装minio
minio是开源的对象存储组件 ,兼容S3协议。 在安装方式上,支持docker, 包管理器安装,以及源码安装。我使用的是macos 的brew安装。 网上关于minio的安装与使用的文档不少,这里不作过多说明。
MinIO Docs | MinIO快速入门指南docs.min.io![9d1c461e50ead44bfcf21b555c8cefad.png](https://i-blog.csdnimg.cn/blog_migrate/9d08160214530251a04b250d919fc66a.jpeg)
brew install minio/stable/minio
mkdir -p ~/develop/minio-data
cd ~/develop/minio-data
minio server ./
minio启动之后会在控制台打印出监听端口及用户名密码等, 依照提示访问就可以。 访问链接 http://127.0.0.1:9000, 账号密码minioadmin/minioadmin。在浏览器中打开这个地址就查询当前bucket列表,文件列表等。
接下来是安装mc命令行
brew install minio/stable/mc
mc --help
mc alias set myminio http://127.0.0.1:9000 minioadmin minioadmin
mc mb myminio/abc # 在myminio中创建新的bucket,名为abc
mc ls myminio # 列出myminio中文件与目录列表
mc 可以替代shell下 一些常用的文件访问命令,比如ls, mkdir, rm等, 它将minio提供服务地址的别名(例如上面的myminio)当作一个文件夹来访问。
- mc ls 这样不加参数时列出的是当前主机文件系统下的内容,而mc ls myminio列出的是服务端口上的;
- mc mb abc 在当前主机文件系统下创建目录abc, 而 mc mb myminio/abc是在minio服务端口上创建目录
- mc alias命令添加的别名保存在文件~/.mc/config.json中。除了刚添加的myminio之外,还有其它几个预设的别名
使用SDK访问minio
这里使用python sdk来实现读写 demo。pip命令直接安装
MinIO Docs | Python Client快速入门指南docs.min.iopip install minio
示例代码
#/usr/bin/env python
# encoding: utf-8
# Import Minio library.
from minio import Minio
from minio.error import (ResponseError, BucketAlreadyOwnedByYou,
BucketAlreadyExists)
import io
BUCKET_NAME = 'files'
# 初始化minioClient, 提供访问地址, 访问账号与密码
minioClient = Minio('127.0.0.1:9000',
access_key='minioadmin',
secret_key='minioadmin',
secure=False)
# bucket不存时创建
found = minioClient.bucket_exists(BUCKET_NAME)
if not found:
minioClient.make_bucket(BUCKET_NAME)
print('created bucket')
else:
print('bucket exists')
# 创建文件, 直接提供内容。 若从文件路径上传,使用fput_object
name = u'art-001'
content = u'this the content body'
put_result = minioClient.put_object(BUCKET_NAME, name, io.BytesIO(content.encode()), len(content), 'text/plain')
print(put_result)
# 读取内容
try:
get_response = minioClient.get_object(BUCKET_NAME, name)
#print(get_response.getheaders())
print(get_response.read())
finally:
get_response.close()
get_response.release_conn()
输出内容
bucket exists
('1c294cd138133f900838c4e0b6fbcd3d', None)
this the content body
python SDK的几点说明:
- 上传文件提供fput_object与put_object, 它们的区别是fput_object的第三个参数是文件路径的字符串;而put_object的第三个参数是一个文件对象,需要有read()方法, 上面的代码中使用io.BytesIO(content.encode())来从str创建io对象
- put_object返回的是etag与versionId, 在访问文件时主要还是靠传参bucket与name来读取。可以多次put_object调用相同的name, 后面的内容会覆盖之前的。
- get_object 返回的是urllib3.response.HTTPResponse 对象, 就和处理普通的http响应没有区别
查看minio存储目录
这里安装的是单机版本的minio, 会将上传的文件直接保存在本机的文件系统里。 回看启动命令: minio server ./ 第二个参数就是保存的目录。
cd ~/develop/minio-data/
ls -l
ls -l files/