minio 使用记录

1.介绍

官方介绍是:

MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。

MinIO是一个非常轻量的服务,可以很简单的和其他应用的结合,类似 NodeJS, Redis 或者 MySQL。

实际上他就是个对象存储服务,跟平时用的oss,oos都没得啥区别。

2.下载安装

直接贴地址好吧 https://docs.min.io/cn/minio-quickstart-guide.html

我下载的是windwos版的

微软Windows系统64位https://dl.min.io/server/minio/release/windows-amd64/minio.exe
下载完成后,cmd如下方式安装 后面那个目录就是你要初始化的位置
minio.exe server D:\Photos

如下界面表示成功启动。下次启动还是上面的命令目录跟上次一样的就好了。

 

这里报错提示的是,使用的默认账号密码。需要修改。

修改位置在你的初始化目录 + \.minio.sys\config\config.json, 打开后搜索 access_key和secret_key进行修改就好了,注意如果要修改一定要大于8位长度,不然启动会报错。

然后我们浏览器打开 http://127.0.0.1:9000/ 就可以进入面板操作了。

以下是python示例

编写工具类,下面简单写了一下如何上传文件和下载文件

from minio import Minio, ResponseError



from config import Config


class MyOss():
    def __init__(self):
        bucket_name = Config.myoss_bucket_name
        self.myoss = Minio(Config.myoss_url,
                            access_key=Config.myoss_access_key,
                            secret_key=Config.myoss_secret_key,
                            secure=False)
        # 检测是否有初始化的bucket没有则创建
        try:
            if not self.myoss.bucket_exists(bucket_name):
                try:
                    print(self.myoss.make_bucket(bucket_name))
                except ResponseError as err:
                    print(err)
        except ResponseError as err:
            print(err)

    # 写入对象信息
    def fput_object(self, object_name, data, ext):
        content_type = "application/octet-stream"
        if ext in ["png", "jpg", "jpeg"]:
            content_type = f"image/{ext}"
        elif ext in ["mp3", "wma", "wav"]:
            pass
        elif ext in ["mp4", "3gp", "mpeg", "flv"]:
            pass
        elif ext == "pdf":
            content_type = f"image/pdf"
        else:
            content_type = "application/octet-stream"
        try:
            a1, a2 = self.myoss.fput_object(Config.myoss_bucket_name, object_name, data, content_type)
        except Exception as e:
            return False, e
        return True, a1

    # 读取对象信息
    def get_object(self, filename):
        return self.myoss.get_object(Config.myoss_bucket_name, filename)

简单的在接口中使用


from flask import Flask

from app.tools.myoss import MyOss
from config import Config

app = Flask(__name__)
app.config.from_object(Config)
myoss = MyOss()


from app import app,myoss

# 文件上传
@app.route('/api/upload', methods=['POST'])
def upload():
    try:
        file = request.files['file']
    except Exception as e:
        app.logger.error(e)
        return resp_error("请上传文件!")
    # 如果上传文件将检测文件后缀
    if not file:
        return resp_error("请上传文件!")
    file_name = file.filename
    if not upload_file_name(file_name, Config.ALLOWED_EXTENSIONS):
        return resp_error("文件格式错误!")
    file_name = file_name.replace("\"", "")
    if '.' not in file_name:
        return resp_error("文件格式错误!")
    ext = file_name.rsplit('.', 1)[-1]
    # 改变文件名字
    nowTime = datetime.datetime.now().strftime("%Y%m%d%H%M%S")  # 生成当前时间
    uniqueNum = to_md5(str(uuid.uuid1()) + str(nowTime))
    new_filename =uniqueNum + '.' + ext
    # 保存文件
    file_dir = os.path.join(Config.basedir, Config.UPLOAD_FOLDER)
    if not os.path.exists(file_dir):
        os.makedirs(file_dir)
    new_path = os.path.join(file_dir, new_filename)
    file.save(new_path)  # 保存文件到upload目录
    pok, msg = myoss.fput_object(object_name=new_filename, data=new_path,ext=ext)
    if not pok:
        app.logger.error(msg)
    os.remove(new_path)
    info = {'filename': new_filename}
    return resp_ok("上传成功!", info)

# 读取文件
@app.route('/api/file/<string:filename>', methods=['GET'])
def get_file(filename):
    data = myoss.get_object(filename)
    try:
        response = make_response(data.read())
        headers = data.getheaders()
        response.headers['Content-Type'] = headers['Content-Type']
        response.headers['Content-Length'] = headers['Content-Length']
        response.headers['Accept-Ranges'] = headers['Accept-Ranges']
        return response
    except Exception as e:
        return "未找到该文件!", 404

目前只探索到这一步。更多内容请参考官方文档  https://docs.min.io/cn/minio-quickstart-guide.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值