""" 为指定的文件路径生成 MinIO 预签名下载 URL """ from minio import Minio from datetime import timedelta # MinIO连接配置 MINIO_CONFIG = { 'endpoint': 'minio.datacubeworld.com:9000', 'access_key': 'JOLXFXny3avFSzB0uRA5', 'secret_key': 'G1BR8jStNfovkfH5ou39EmPl34E4l7dGrnd3Cz0I', 'secure': True } BUCKET_NAME = 'finyx' # 文件相对路径列表 FILE_PATHS = [ '/615873064429507639/20251210155041/初步核实审批表_张三.docx', '/615873064429507639/20251210155041/请示报告卡_张三.docx' ] def generate_download_urls(): """为文件路径列表生成下载 URL""" print("="*80) print("生成 MinIO 下载链接") print("="*80) try: # 创建MinIO客户端 client = Minio( MINIO_CONFIG['endpoint'], access_key=MINIO_CONFIG['access_key'], secret_key=MINIO_CONFIG['secret_key'], secure=MINIO_CONFIG['secure'] ) print(f"\n存储桶: {BUCKET_NAME}") print(f"端点: {MINIO_CONFIG['endpoint']}") print(f"使用HTTPS: {MINIO_CONFIG['secure']}\n") results = [] for file_path in FILE_PATHS: # 去掉开头的斜杠,得到对象名称 object_name = file_path.lstrip('/') print("-"*80) print(f"文件: {file_path}") print(f"对象名称: {object_name}") try: # 检查文件是否存在 stat = client.stat_object(BUCKET_NAME, object_name) print(f"✓ 文件存在") print(f" 文件大小: {stat.size:,} 字节") print(f" 最后修改: {stat.last_modified}") # 生成预签名URL(7天有效期) url = client.presigned_get_object( BUCKET_NAME, object_name, expires=timedelta(days=7) ) print(f"✓ 预签名URL生成成功(7天有效)") print(f"\n下载链接:") print(f"{url}\n") results.append({ 'file_path': file_path, 'object_name': object_name, 'url': url, 'size': stat.size, 'exists': True }) except Exception as e: print(f"✗ 错误: {e}\n") results.append({ 'file_path': file_path, 'object_name': object_name, 'url': None, 'exists': False, 'error': str(e) }) # 输出汇总 print("\n" + "="*80) print("下载链接汇总") print("="*80) for i, result in enumerate(results, 1): print(f"\n{i}. {result['file_path']}") if result['exists']: print(f" ✓ 文件存在") print(f" 下载链接: {result['url']}") else: print(f" ✗ 文件不存在或无法访问") if 'error' in result: print(f" 错误: {result['error']}") print("\n" + "="*80) print("完成") print("="*80) return results except Exception as e: print(f"\n✗ 连接MinIO失败: {e}") import traceback traceback.print_exc() return None if __name__ == '__main__': generate_download_urls()