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

使用Flask结合boto3直接上传文件至S3失败,求问题排查

使用boto3上传文件到S3存储桶失败,求排查错误

我尝试使用boto3将文件上传至我的S3存储桶,以下是我编写的代码:

AWS_ACCESS_KEY_ID = "**"
AWS_SECRET_ACCESS_KEY = "**"
BUCKET_NAME = 'dmfiles'
AWS_REGION = 'us-east-1'

s3_client = boto3.client(
    service_name = 's3',
    region_name = AWS_REGION,
    aws_access_key_id=AWS_ACCESS_KEY_ID,
    aws_secret_access_key=AWS_SECRET_ACCESS_KEY)

#UPLOAD FILES TO AWS S3
    if 'file' not in request.files:
        return "No file part", 400
    file = request.files['file']
    if file.filename == '':
        return "No selected file", 400
    if file:
        filename = secure_filename(file.filename)

        # Upload file to S3

        filename = secure_filename(file.filename)
        response = s3_client.upload_file(file,BUCKET_NAME,filename)
        print(f'upload_log_to_aws response: {response}')

我已查阅过类似问题但均未解决我的问题,目前这段代码无法完成文件上传,请问我哪里出错了?


排查出的关键问题及解决办法

  • 缩进语法错误:文件上传的判断逻辑块(if 'file' not in request.files:开始的代码)存在多余缩进,Python对缩进层级要求严格,需将这部分代码的缩进调整到与s3_client定义同级的位置,否则会触发语法报错。

  • upload_file参数不匹配:s3_client.upload_file()的第一个参数要求是本地文件路径字符串或文件描述符,而你直接传入了Flask的FileStorage对象(request.files['file']返回的实例),方法无法正确读取文件内容。解决方式二选一:

    1. 改用支持类文件对象的upload_fileobj方法:
      response = s3_client.upload_fileobj(file, BUCKET_NAME, filename)
      
    2. 先将文件保存到本地临时路径,再用upload_file上传(上传后可删除临时文件):
      import os
      temp_path = f'/tmp/{filename}'
      file.save(temp_path)
      response = s3_client.upload_file(temp_path, BUCKET_NAME, filename)
      os.remove(temp_path)
      
  • 缺失必要导入:代码中使用了request、secure_filename但未显示导入,需在代码顶部添加:

    import boto3
    from flask import request
    from werkzeug.utils import secure_filename
    
  • 权限验证:检查你的AWS密钥是否拥有s3:PutObject权限,同时确认目标存储桶的访问策略允许该密钥执行上传操作。可以先测试用该密钥调用s3_client.list_buckets()验证密钥有效性。

  • 冗余代码:两次调用filename = secure_filename(file.filename)属于重复操作,保留一次即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 02:18:09