笔记笔记
  • Home
  • AI&ML
  • Example
  • Zoo
  • 关于
⌘ K
docker 笔记
常用容器
Sonatype Nexus
GitLab CE
BitTorrent Tracker
搜索引擎
Debian
Jellyfin
MinIO
最后更新时间:
Copyright © 2023-2024 | Powered by dumi | GuoDapeng | 冀ICP备20004032号-1 | 冀公网安备 冀公网安备 13024002000293号

TABLE OF CONTENTS

‌
‌
‌
‌

MinIO

WARNING

最新的社区版本,Web 控制台失去了权限管理等关键功能。

docker 部署

shell
docker pull minio/minio
docker run -d \
-p 9000:9000 \
-p 9001:9001 \
--name minio \
-v $PWD:/data \
-e "MINIO_ROOT_USER=ROOTNAME" \
-e "MINIO_ROOT_PASSWORD=CHANGEME123" \
minio/minio server /data --console-address ":9001"

C++ 客户端

占位,待续。下面是没验证的片段,有时间了在重写写一下。

cpp
#include "miniocpp/client.h"
int main(int argc, char* argv[]) {
// 初始化 MinIO
const auto systemSettingsModelForMinIO = iSystemSettingsService.findMinIOSystemSettings();
minio::s3::BaseUrl baseUrl(systemSettingsModelForMinIO->host, systemSettingsModelForMinIO->https == 1);
minio::creds::StaticProvider provider(
systemSettingsModelForMinIO->accessKey, systemSettingsModelForMinIO->secretKey
);
minio::s3::Client minioClient(baseUrl, &provider);
{
const oatpp::String fileType = "portrait";
const oatpp::String tempFilePath = "./tmp/" + uuidString();
const auto filePart = multipart->getNamedPart(fileType);
OATPP_ASSERT_HTTP(filePart, Status::CODE_422, "提交的文件解析错误")
oatpp::data::stream::FileOutputStream fileOutputStream(tempFilePath->c_str());
fileOutputStream.writeSimple(filePart->getPayload()->getInMemoryData());
fileOutputStream.close();
userPortraitCreateRequestDto->bucket = "work-node";
userPortraitCreateRequestDto->object =
constructOSSObjectName(fileType, tempFilePath, filePart->getFilename());
minio::s3::UploadObjectArgs args;
args.bucket = *userPortraitCreateRequestDto->bucket;
args.filename = *tempFilePath;
args.object = *userPortraitCreateRequestDto->object;
auto resp = minioClient.UploadObject(args);
OATPP_ASSERT_HTTP(resp.status_code == 0, Status::CODE_422, "OSS 服务器错误;上传失败")
std::filesystem::remove(tempFilePath->c_str());
}
{
auto userPortraitUpdateRequestDto = UserPortraitUpdateRequestDto::createShared();
userPortraitUpdateRequestDto->portraitId = userPortraitResponseDto->portraitId;
userPortraitUpdateRequestDto->expirySeconds = 60;
userPortraitUpdateRequestDto->urlExpirationTime = 60 + getCurrentTime();
minio::s3::GetPresignedObjectUrlArgs args;
args.bucket = *userPortraitCreateRequestDto->bucket;
args.object = *userPortraitResponseDto->object;
args.expiry_seconds = *userPortraitUpdateRequestDto->expirySeconds;
args.method = minio::http::Method::kGet; // 不写这个,有时候不能生成 URL
const auto resp = minioClient.GetPresignedObjectUrl(args);
OATPP_ASSERT_HTTP(!resp.url.empty(), Status::CODE_422, "OSS 服务器错误;预签失败")
userPortraitUpdateRequestDto->url = resp.url;
iUserPortraitService.updateUserPortrait(userPortraitUpdateRequestDto);
}
}

配置

WARNING

已经在最新社区版本中删除了管理界面,用不上了。

匿名访问

如下配置即可这样随便访问 default 路径下的资源。例如:http://192.168.30.202:9000/work-node/default/avatar/default.png

Shell 配置方式

目前 Web 控制台还能创建桶,还能上传文件浏览文件。

shell
# 查看别名列表
mc alias list
# 格式:mc alias set <别名> <服务地址> <AccessKey> <SecretKey>
mc alias set local http://localhost:9000 YOUR_ROOT_ACCESS_KEY YOUR_ROOT_SECRET_KEY
# 查看 AccessKey 和 SecretKey 的配置
mc alias list local
# 列出所有存储桶
mc ls local
# 列出 myminio 存储桶里的文件
mc ls local/myminio
# 删除桶里的文件
mc rm -r --force local/myminio
# 删除桶
mc rb local/myminio
# 设置桶权限;支持 public、private 和 download
mc anonymous set private local/myminio
mc anonymous set download local/myminio/default
# 导出策略
mc anonymous get-json local/myminio > policy.json
mc anonymous set-json policy.json local/myminio

policy.json 内容为 {"Statement":[],"Version":"2012-10-17"} 时,恢复默认配置。

Preview