关于毕设图片存储的部分,打算自建一个简单的minio即可

简单配置说明

镜像:bitnami/minio:2023.4.20

持久化:/data (可能需要配置chmod)

端口:

9000:S3接口

9001:管理面板

环境变量:

MINIO_ROOT_USER 用户名

MINIO_ROOT_PASSWORD 密码

容器的话,照着上面配即可,访问9001接口进入管理面板

权限

用户创建的时候勾选的权限解释:

consoleAdmin 控制台管理员
diagnostics 诊断
readonly 只读
readwrite 读写
writeonly 只写

更复杂的s3自定权限参考:(89条消息) Minio入门系列【10】Minio之权限控制策略minio权限控制云烟成雨TD的博客-CSDN博客

关于桶的权限,除了public和private以外,还有custom可以进行更细分的操作(当然也可以使用mc 命令),初始的状态可能如下所示

删掉第一段,即桶的目录的权限

在第二段只保留GetObject的权限

这样普通用户就只有查看权限了

使用

以python为例

首先创建如下配置文件

from minio import Minio
from minio.error import S3Error

minio_client = Minio(
    "your-minio-server-address",
    access_key="your-minio-access-key",
    secret_key="your-minio-secret-key",
    secure=True,
)

其中,第一个地址是你的s3接口地址,secure是否是TLS连接

使用时,调用minio_client 即可,以django的视图函数为例

from public_tools.minio_utils import minio_client

...
class PostImage(APIView):

    def post(self, request):
        ...
        images = request.FILES.getlist("images")
        for image in images:
            image_extension = os.path.splitext(image.name)[1]
            image_name = f"{uuid4()}{image_extension}"
            minio_client.put_object("xxxx", image_name, image, image.size, content_type=image.content_type)
            image_url = minio_client.presigned_get_object("xxxx", image_name)
            # 写入数据库
            ...
		...

这样即可