一、問題描述
minio分享文件的鏈接,最多支持分享七天,而需求要求設置永久可下載?
二、解決過程
minio提供了一個客戶端工具。可以直接對minio server進行配置,將指定桶設置為公共永久可下載。
1.安裝客戶端
首先是安裝minio客戶端,這個官方文檔很清楚,各取所需吧.(Linux 或者windows 選擇下載一個即可)
Linux 二進制文件地址:https://dl.minio.io/client/mc/release/linux-amd64/mc
windows exe文件:https://pan.baidu.com/s/1DxO0MgXqtEVg40FgiyL1CQ
2.設置自定義命令並啟動
Linux下: alias mc="./mc"
windows下: mc.exe
至此,我們的minio client就安裝完成了。
3. 添加服務端host
使用 minio client 將我自己的 minio server 添加到 mc 的配置管理:
accessKey:admin
secretKey: password
mc config host add minio http://xxx.xxx.xxx.xxx:9000 admin password S3v4
這樣我們才能直接管理這個 minio server 端。
4. 配置下載策略
配置策略命令查看: mc policy
mc policy set download minio/mybucket mc policy set public minio/mybucket mc policy set public minio/mybucket
這個命令的作用是將 server 端的 mybucket 桶設置為開放管理,可以直接通過 url 進行下載。
[桶名]/[路徑]可以一直拼接到具體的文件夾或文件
類似於以下 http://xxx.xxx.xxx.xxx:9000/mybucket/xxx.zip,可用瀏覽器直接從此URL訪問下載。
PS: python 代碼形式設置永久可下載
環境: python3
安裝包:pip install minio
# 1.建立連接
from minio import Minio
minioClient = Minio(
endpoint='minio.steamsit.crcloud.com', # 文件服務地址
access_key='admin', # 用戶名
secret_key='etImnEJYl', # 密鑰
secure=False # 設為True代表啟用HTTPS
)
# 2.設置永久可下載
#a. 桶名
bucket_name = 'test_file' # 修改為自己已創建的桶名
#b.通過桶權限設置方法,修改時間期限限制。
policy = '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"AWS":
["*"]},"Action":["s3:GetBucketLocation","s3:ListBucket"],"Resource":
["arn:aws:s3:::%s"]},{"Effect":"Allow","Principal":{"AWS":["*"]},"Action":
["s3:GetObject"],"Resource":["arn:aws:s3:::%s/*"]}]}' % (bucket_name, bucket_name)
minioClient.set_bucket_policy(bucket_name=bucket_name, policy=policy)
四、命令示例
[root@hoolink-hz-192-168-1-153 mc]# mc policy list minio/test-hoolink-edm
Access permission for `minio/test-hoolink-edm` is set to `public`
[root@hoolink-hz-192-168-1-153 mc]# mc policy list minio/test-hoolink-edm
test-hoolink-edm/* => readwrite
[root@hoolink-hz-192-168-1-153 mc]#
Access permission for `minio/test-hoolink-edm-preview` is set to `public`
[root@hoolink-hz-192-168-1-153 mc]#
[root@hoolink-hz-192-168-1-153 mc]#
[root@hoolink-hz-192-168-1-153 mc]# mc policy
Name:
mc policy - manage anonymous access to buckets and objects
USAGE:
mc policy set [FLAGS] PERMISSION TARGET
mc policy set-json [FLAGS] FILE TARGET
mc policy get [FLAGS] TARGET
mc policy get-json [FLAGS] TARGET
mc policy list [FLAGS] TARGET
FLAGS:
--recursive, -r list recursively
--config-dir value, -C value path to configuration folder (default: "/root/.mc")
--quiet, -q disable progress bar display
--no-color disable color theme
--json enable JSON formatted output
--debug enable debug output
--insecure disable SSL certificate verification
--help, -h show help
PERMISSION:
Allowed policies are: [none, download, upload, public].
FILE:
A valid S3 policy JSON filepath.
EXAMPLES:
1. Set bucket to "download" on Amazon S3 cloud storage.
$ mc policy set download s3/burningman2011
2. Set bucket to "public" on Amazon S3 cloud storage.
$ mc policy set public s3/shared
3. Set bucket to "upload" on Amazon S3 cloud storage.
$ mc policy set upload s3/incoming
4. Set policy to "public" for bucket with prefix on Amazon S3 cloud storage.
$ mc policy set public s3/public-commons/images
5. Set a custom prefix based bucket policy on Amazon S3 cloud storage using a JSON file.
$ mc policy set-json /path/to/policy.json s3/public-commons/images
6. Get bucket permissions.
$ mc policy get s3/shared
7. Get bucket permissions in JSON format.
$ mc policy get-json s3/shared
8. List policies set to a specified bucket.
$ mc policy list s3/shared
9. List public object URLs recursively.
$ mc policy --recursive links s3/shared/
[root@hoolink-hz-192-168-1-153 mc]# mc policy get minio/test-hoolink-edm
Access permission for `minio/test-hoolink-edm` is `public`