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

AWS S3预签名URL下载遇AccessDenied错误求助

问题分析与解决

核心错误点

  1. boto3方法参数误用:s3.download_file()的正确参数格式是(bucket名称, 对象key, 本地文件名),你把预签名URL当成了第二个参数(对象key),完全不符合该方法的使用逻辑——这个方法是通过本地AWS凭证直接访问S3,根本不需要预签名URL。
  2. URL处理残留无效字符:你的url2 = str(url).replace("['", "")只去掉了开头的[',但没处理结尾的'],导致预签名URL里的过期时间参数变成了1666657825'],直接破坏了预签名的有效性,这也是错误信息里提示"Invalid date"的原因。

正确解决方案

方案1:用预签名URL直接下载(推荐,适配你已有预签名URL的场景)

不需要用boto3的download_file,直接用HTTP请求库请求清理后的预签名URL即可:

import requests

def getfile(self, url):
    # 清理URL里的无效字符,去掉首尾的['和']
    url_clean = str(url).strip("[]'")
    filename = "file_name.hex"
    # 发送请求并保存文件
    response = requests.get(url_clean)
    response.raise_for_status()  # 捕获请求失败的情况
    with open(filename, 'wb') as f:
        f.write(response.content)

方案2:用boto3直接下载(无需预签名URL)

如果你的本地环境已经配置了有访问权限的AWS凭证(比如~/.aws/credentials文件),可以直接通过bucket名和对象key下载:

def getfile(self):
    s3 = boto3.client('s3')
    bucket_name = "test1"  # 从你的示例URL可提取出bucket名称
    object_key = "xxxxxxxx"  # URL中test1后的路径就是对象key
    filename = "file_name.hex"
    s3.download_file(bucket_name, object_key, filename)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 10:45:36