栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Minio 小技巧 | 通过编码设置桶策略,实现永久访问和下载

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Minio 小技巧 | 通过编码设置桶策略,实现永久访问和下载

你好,我是博主宁在春

之前其实也写过一篇关于Minio设置桶策略的文章,但是是为了解决通过永久访问的问题。那个时候是使用Minio的客户端mc来设置的,非常的不方便,每次给桶设置策略时候,都需要进入mc去设置。有小伙伴就私信问我,有没有可以在编码中可以设置桶策略的。

上篇:Docker 安装Minio Client,解决如何设置永久访问和下载链接
上上篇:SpringBoot 集成 Minio,实现使用自己 的文件服务器
上上上篇:Docker 安装 minio

minio版本:8.3.0

一、官网

Minio-github

我先去gitgub上看了一下Minio的API,确实有个设置桶策略的API。

我是看了又看,也没明白个啥,真心话。

PolicyType.NONE, PolicyType.READ_ONLY, PolicyType.READ_WRITE, PolicyType.WRITE_ONLY,这个PolicyType也没指明,是真的麻烦啊。

去看例子也没有找到。‍

后来在百度上搜了一下Minio策略,才知道用的是Minio的桶策略是基于访问策略语言规范(Access Policy Language specification)的解析和验证存储桶访问策略 –Amazon S3。可简单理解为资源-权限模型吧。具体没深入。

意思虽然是参数中的那样,但是写起来是一点关系也没有

二、策略 2.1、介绍

我们先看个Amazon S3官方例子:

{
    "Version": "2012-10-17",
    "Id": "ExamplePolicy01",
    "Statement": [
        {
            "Sid": "ExampleStatement01",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/Dave"
            },
            "Action": [
                "s3:GetObject",
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::awsexamplebucket1
public class PolicyJsonUtils {

    
    public static String json2String(String path, String bucketName) throws IOException {
        StringBuilder result = new StringBuilder();
        ClassPathResource resource = new ClassPathResource(path);
        InputStream in = resource.getInputStream();
        // 读取文件上的数据。
        // 将字节流向字符流的转换。
        // 读取
        InputStreamReader isr = new InputStreamReader(in, StandardCharsets.UTF_8);
        // 创建字符流缓冲区
        // 缓冲
        BufferedReader bufr = new BufferedReader(isr);

        String line = null;
        while ((line = bufr.readLine()) != null) {
            result.append(System.lineSeparator()+line);
        }
        isr.close();
        JSONObject parse = (JSONObject) JSONObject.parse(result.toString());
        JSONArray statement = (JSONArray) parse.get("Statement");
        JSONObject o = (JSONObject) statement.get(0);
        o.remove("Resource");
        o.fluentPut("Resource", "arn:aws:s3:::" + bucketName);
        JSONObject o1 = (JSONObject) statement.get(1);
        o1.remove("Resource");
        o1.fluentPut("Resource", "arn:aws:s3:::" + bucketName + "
@SneakyThrows
public void setBucketPolicy(String bucketName) {
    PolicyJsonUtils.json2String("policyJson.json",bucketName);
    minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(READ_WRITE.replace(BUCKET_PARAM, bucketName)).build());
}
void setPolicy(String bucketName);

@Override
public void setPolicy(String bucketName) {
    minioUtil.setBucketPolicy(bucketName);
}

@GetMapping("/setPolicy/{bucketName}")
public String setPolicy(@PathVariable String bucketName){
    minioService.setPolicy(bucketName);
    return "设置成功";
}
2.4、测试

创建一个存储桶。

上传图片:

直接点击这个链接是无法访问的。会报这样的错误。

设置策略:

我们再访问一次之前的链接,就已经是可以访问的状态了。

三、自言自语

本文就是简单介绍了,具体使用具体情况具体分析啦。

你好,我是博主宁在春:主页

希望本篇文章能让你感到有所收获!!!

祝 我们:待别日相见时,都已有所成。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/351241.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号