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

使用Python的boto3从指定S3路径下载文件时遇404错误求助

解决S3文件下载404错误的方案

我来帮你搞定这个问题,你遇到的404错误大概率是代码里的S3对象路径没写对,咱们一步步排查解决:

1. 核心问题:对象键路径不完整

你手动下载用的是完整路径s3://name1/name2/file_name.txt,但代码里调用download_file时,第二个参数只传了file_name.txt——这就相当于告诉S3去桶name1的根目录找这个文件,而实际上它在name2前缀下面,自然会返回404。

另外还要注意:download_file的第三个参数如果只传文件夹路径(比如my_local_folder),在部分系统下会报错,最好指定完整的本地文件名。

给你修正后的代码,直接从传入的S3路径里解析桶名和对象键,避免手动拼接出错:

import boto3
locations = ['s3://name1/name2/file_name.txt']
s3_client = boto3.client('s3')

for s3_path in locations:
    # 拆分S3路径,获取桶名和对象键
    stripped_path = s3_path.replace('s3://', '')
    bucket_name, object_key = stripped_path.split('/', 1)
    # 拼接本地保存路径(确保包含文件名)
    local_file = f'my_local_folder/{object_key.split("/")[-1]}'
    # 执行下载
    s3_client.download_file(bucket_name, object_key, local_file)

2. 其他可能的排查方向

如果修正路径后还是报错,可以检查这几个点:

  • 权限不一致:手动下载用的凭证和代码里的AWS凭证可能不是同一个,确认代码使用的IAM角色/用户有s3:GetObject权限,能访问该桶和对象。
  • 区域不匹配:如果你的S3桶在特定区域(比如ap-southeast-1),初始化boto3客户端时要指定区域,否则可能会访问到错误的端点:
    s3_client = boto3.client('s3', region_name='你的桶所在区域')
    
  • 大小写敏感问题:S3的对象名是大小写敏感的,确认代码里的文件名和S3上的完全一致(比如别把File_Name.txt写成file_name.txt)。
  • 拼写错误:再核对一遍桶名name1、前缀name2和文件名,有时候多一个空格或者少一个字符都会导致404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:42:37