关于毕设图片存储的部分,打算自建一个简单的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)
# 写入数据库
...
...
这样即可
评论
FjnwmIiZSN
cyTGpUiQ
ScnTblYxFVXM
AIyOVuFiWJolhG
nfWHkQVxdDqs
GemUifInzjvcKuxt