Minio设置开放下载链接

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

安装配置和SDK之类的就看官方文档就非常好,很全面:https://docs.minio.io/cn/

在实际操作的时候,发现minio分享文件,最多支持分享七天。

调用客户端的presignedGetObject方法,expires最多设置为七天即:

DEFAULT_EXPIRY_TIME = 7 * 24 * 3600;

下面是方法的源码,

/**
   * Returns an presigned URL to download the object in the bucket with given expiry time.
   *
   * </p><b>Example:</b><br>
   * <pre>{@code String url = minioClient.presignedGetObject("my-bucketname", "my-objectname", 60 * 60 * 24);
   * System.out.println(url); }</pre>
   *
   * @param bucketName  Bucket name.
   * @param objectName  Object name in the bucket.
   * @param expires     Expiration time in seconds of presigned URL.
   *
   * @return string contains URL to download the object.
   *
   * @throws InvalidBucketNameException   upon an invalid bucket name
   * @throws InvalidKeyException          upon an invalid access key or secret key
   * @throws IOException                  upon signature calculation failure
   * @throws NoSuchAlgorithmException     upon requested algorithm was not found during signature calculation
   * @throws InvalidExpiresRangeException upon input expires is out of range
   */
public String presignedGetObject(String bucketName, String objectName, Integer expires)
    throws InvalidBucketNameException, NoSuchAlgorithmException, InsufficientDataException, IOException,
           InvalidKeyException, NoResponseException, XmlPullParserException, ErrorResponseException,
           InternalException, InvalidExpiresRangeException {
    return presignedGetObject(bucketName, objectName, expires, null);
  }

这显然不符合我的需求,我使用minio作为图片服务器,希望前端能够永久下载链接,通过查看SDK和网上查找实践,可以通过设置访问策略解决。下面是三种设置策略的方式:

一:服务端设置访问策略:

编辑想要共享的bucket,添加访问策略Prefix为 * ,policy为Read And Write

二、通过客户端远程设置访问策略

首先是安装minio客户端,这个官方文档很清楚。

使用 minio client 将我自己的 minio server 添加到 mc 的配置管理:

mc config host add minio http://xxx.xxx.xxx.xxx:9000 minio password S3v4

这样我们才能直接管理这个 minio server 端,然后配置下载策略

mc policy public minio/base

这个命令的作用是将 server 端的 base 桶设置为开放管理,可以直接通过 url 进行下载。

 [桶名]/[路径]可以一直拼接到具体的文件夹或文件。

三、通过Java代码设置访问策略

1.设置访问策略的方法:

    private MinioClient client;   

    /**
     * 设置访问策略
     * @param objectPrefix
     * @param policyType
     */
    public void setBucketPolicy(String objectPrefix,PolicyType policyType) throws IOException, InvalidKeyException, NoSuchAlgorithmException, InsufficientDataException, InternalException, NoResponseException, InvalidBucketNameException, XmlPullParserException, ErrorResponseException, InvalidObjectPrefixException, RegionConflictException {
        if (null == this.bucket() || 0 == this.bucket().length()) {
            throw new IllegalStateException("Empty bucket specified!");
        }
        if (this.client.bucketExists(this.bucket())) {
            if (!policyType.equals(client.getBucketPolicy(this.bucket(),objectPrefix))) {
                client.setBucketPolicy(this.bucket(),objectPrefix,policyType);
            }
        } else {
            this.client.makeBucket(this.bucket());
            client.setBucketPolicy(this.bucket(),objectPrefix,policyType);
        }
    }

2.在生成客户端bean时调用:

oss.setBucketPolicy("*", PolicyType.READ_WRITE);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单剑撩花猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值