问题
minio分享文件的链接,最多支持分享七天,而需求要求设置永久可下载?
解决
方式一: minio提供了一个客户端工具。可以直接对minio server进行配置,将指定桶设置为公共永久可下载。
方式二: Python api 请求修改
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 端。
此时可以查看一下mc 文件目录下的config.json 文件内容,是否多了一个“minio” 对象:
{
"version": "9",
"hosts": {
"gcs": {
"url": "https://storage.googleapis.com",
"accessKey": "YOUR-ACCESS-KEY-HERE",
"secretKey": "YOUR-SECRET-KEY-HERE",
"api": "S3v2",
"lookup": "dns"
},
"minio": {
"url": "http://xxx.xxx.xxx.xxx:9000",
"accessKey": "admin",
"secretKey": "password",
"api": "s3v4",
"lookup": "auto"
},
"play": {
"url": "https://play.min.io",
"accessKey": "Q3AM3UQ867SPQQA43P2F",
"secretKey": "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG",
"api": "S3v4",
"lookup": "auto"
},
"s3": {
"url": "https://s3.amazonaws.com",
"accessKey": "YOUR-ACCESS-KEY-HERE",
"secretKey": "YOUR-SECRET-KEY-HERE",
"api": "S3v4",
"lookup": "dns"
}
}
}
4. 配置下载策略
配置策略命令查看: mc policy
mc policy set download 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 MiniominioClient = Minio(
endpoint='minio.xxx.com',
# 文件服务地址
access_key='admin',
# 用户名
secret_key='admin',
# 密钥
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)