You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python生成Minio文件的免登录直接下载链接

实现方法

你需要的无需登录即可直接访问的临时分享下载链接,直接使用Minio Python SDK提供的presigned_get_object方法即可生成。该方法返回带权限签名的临时访问链接,和Minio UI控制台点击「分享」按钮生成的链接逻辑完全一致,不需要提前把存储桶设置为公开访问权限。

核心参数说明

  • 前两个必填参数依次为目标存储桶名、对象在桶内的完整路径/文件名
  • expires:可选参数,链接有效时长,单位为秒,默认值为604800(即7天),和控制台默认分享有效期匹配,可按需自定义时长,比如传入3600即代表链接1小时后失效
  • 额外可选参数response_headers:可自定义返回头,比如需要让链接在浏览器内直接预览图片/PDF而非触发下载,可传入{"response-content-disposition": "inline"},默认行为是触发文件下载,和控制台默认效果一致

注意事项

  • 初始化Minio客户端时填写的endpoint必须是终端用户实际可访问的地址(如果Minio部署在反向代理后,不要填内网地址),否则生成的链接无法正常访问
  • 如果你部署Minio时启用了HTTPS,初始化客户端时要把secure参数设为True,否则生成的链接会使用http协议导致访问异常
  • 原代码中fput_object传参有误:该方法直接接收本地文件路径作为参数,不需要手动打开文件、传入文件大小,手动打开文件传对象的写法是put_object方法的调用方式

完整可运行代码

from minio import Minio
import os

def getMinioClient(access, secret):
    return Minio(
        endpoint="localhost:9000",
        access_key=access,
        secret_key=secret,
        secure=False,
    )

if __name__ == "__main__":
    client = getMinioClient("admin", "Secret_key123")
    try:
        file_name = "myfile.csv"
        bucket = "file_bucket"

        # 上传本地文件
        client.fput_object(
            bucket_name=bucket,
            object_name=file_name,
            file_path=file_name
        )
        print("文件上传完成")

        # 原有本地下载逻辑保留
        client.fget_object(bucket, file_name, f"{file_name}_downloaded")

        # 生成有效期7天的匿名分享下载链接
        share_download_link = client.presigned_get_object(
            bucket_name=bucket,
            object_name=file_name,
            expires=604800
        )
        print(f"匿名可直接访问的下载链接:{share_download_link}")

    except Exception as e:
        print(e)

生成的链接直接复制到浏览器地址栏即可触发文件下载,无需登录Minio账号,签名到期后链接会自动失效,无法再访问对应文件。

内容的提问来源于stack exchange,提问作者young_minds1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:39:17