首页 > 编程问答 >无法使用 boto3 将图像上传到 S3

无法使用 boto3 将图像上传到 S3

时间:2024-07-26 04:25:04浏览次数:10  
标签:python amazon-s3 boto3 fastapi

我正在使用 fastapi 将图像上传到我的 s3 存储桶。首先,我尝试使用预先签名的 url 方法从邮递员上传图像,它工作正常。但是当我尝试使用 upload_fileobj 直接从服务器上传图像(大小〜7kb)时,它花费了大量时间并出现连接超时错误。花了这么多时间后,我不明白为什么请帮助我。

我的代码:-

from fastapi import FastAPI, UploadFile, File
import boto3

app = FastAPI()

s3 = boto3.client('s3',
    aws_access_key_id='******',
    aws_secret_access_key='********',
    region_name="********")

BUCKET_NAME='*******'

@app.post("/upload")
async def upload(file: UploadFile = File(...)):
    if file:
        print(file.filename)
        s3.upload_fileobj(file.file, BUCKET_NAME, file.filename)
        return "file uploaded"
    else:
        return "error in uploading."

连接超时错误和图像上传时间过长表明你的代码可能在尝试上传文件之前将整个文件读入内存中。 upload_fileobj 方法旨在以块的形式流式传输数据,以避免这种情况,但你的代码中的某些内容可能会干扰此行为。

以下是最有可能的原因和解决方案:

  1. FastAPI 将整个文件读入内存: FastAPI 默认情况下可能会将整个上传的文件读入内存,然后再将其传递给你的函数。

解决方案: 使用 file: UploadFile = File(..., stream=True) 来指示 FastAPI 以流的形式处理文件。

  1. Boto3 配置: Boto3 默认情况下使用多部分上传,以便更有效地传输大型文件。然而,对于较小的文件,这可能会增加开销。

解决方案: 对于你的 7KB 文件,尝试禁用多部分上传。你可以通过在 upload_fileobj 中将 ExtraArgs={'ACL': 'public-read', 'ContentType': file.content_type, 'ServerSideEncryption': 'AES256'} 设置为你的所需值来实现。

  1. 网络问题: 缓慢或不稳定的网络连接也可能导致超时。

解决方案: 检查你的互联网连接并确保它稳定。你还可以尝试增加 Boto3 的超时时间。

以下是你更新后的代码:

from fastapi import FastAPI, UploadFile, File
import boto3

app = FastAPI()

s3 = boto3.client('s3',
    aws_access_key_id='******',
    aws_secret_access_key='********',
    region_name="********")

BUCKET_NAME='*******'

@app.post("/upload")
async def upload(file: UploadFile = File(..., stream=True)):
    if file:
        print(file.filename)
        s3.upload_fileobj(
            file.file,
            BUCKET_NAME,
            file.filename,
            ExtraArgs={'ACL': 'public-read', 'ContentType': file.content_type, 'ServerSideEncryption': 'AES256'} 
        )
        return "文件已上传"
    else:
        return "上传时出错。"

如果在进行这些更改后仍然遇到问题,请提供有关你的环境(例如,FastAPI 版本、Boto3 版本、Python 版本)和你在尝试上传文件时遇到的任何特定错误消息的更多信息。

标签:python,amazon-s3,boto3,fastapi
From: 78795271

相关文章

  • 在 matplotlib 中绘制一个字符串函数 // 将 str 解释为 python 代码?
    我正在创建一个RPN计算器,尝试绘制用户给出的函数。例如,如果用户输入"xsin3*plot"我希望它绘制sin(x)*3其代码如下。注意:问题在ifprompt=="plot"userInputX=""#userInputXisalwaysreplacedbefore......
  • Python (Pebble) - 超时功能。当 TimeoutError 发生时,获取从 iterable 传递给函数的值
    我正在尝试在Pebble中设置工作超时(基本上有效)frompebbleimportProcessPoolfrommultiprocessingimportProcess,Pool,cpu_countimporttimedeftest_fn(randomNumberFromList):#print(f'Beginngingforthisnumber:{randomNumberFromList}')ifr......
  • 为什么在 Python 上使用正则表达式组功能会给出不同的输出
    importrestring1="aaabaa"zusuchen="aa"#1m_start=re.finditer(fr'(?=({zusuchen}))',string1)results=[(match.start(1),match.end(1)-1)formatchinm_start]forzinresults:print(z)print("Now#2:"......
  • 如何在python3中找到文件的长度?
    我的第一个.py:defcreate_file(file_name):list=["ab","cd","ef"]foriinlist:withopen(file_name,"a+")asinput_file:print("{}".format(i),file=input_file)我的第二个.py:fromfirstimport......
  • 哪种 python 日志记录风格是推荐的或标准的?
    我是Python新手。介于以下2个选项之间。对于python来说,推荐哪种风格或者更好?logging.info(f"Won'tsavemodelasscoreisbelow0,score:{score}")logging.info("Won'tsavemodelasscoreisbelow0,score%s",score)我个人更喜欢第二种方法。在Python......
  • python 协程 自定义互斥锁
    最近在用python的一款异步web框架sanic搭建web服务,遇到一个需要加特定锁的场景:同一用户并发处理订单时需要排队处理,但不同用户不需要排队。如果仅仅使用asyncwithasyncio.Lock()的话。会使所有请求都排队处理。1importasyncio2importdatetime34lock=asyncio.L......
  • Python 获取tiktok视频评论回复数据 api接口
    TIKTOKapi接口爬取tiktok视频评论回复数据详细采集页面如图https://www.tiktok.com/@dailymail/video/7329872821990182190?q=neural%20link&t=1706783508149请求APIhttp://api.xxxx.com/tt/video/info/comment/reply?video_id=7288909913185701125&comment_id=7294900......
  • Shopee虾皮api python获取虾皮购物平台的商品数据信息 数据采集
    虾皮购物(英语:Shopee)是一个电商平台,总公司设在新加坡,归属于SeaGroup(之前称之为Garena),该企业于2009年由李小冬(ForrestLi)创办。虾皮购物于2015年初次在新加坡推出,现阶段已拓展到马来西亚、泰国、印度尼西亚、越南和菲律宾。虾皮购物为全球华人地区的客户提供线上购物和销售......
  • python实现图像特征提取算法1
    python实现Marr-Hildreth算法、Canny边缘检测器算法1.Marr-Hildreth算法详解算法步骤公式Python实现详细解释优缺点2.Canny边缘检测器算法详解算法步骤公式Python实现详细解释优缺点1.Marr-Hildreth算法详解Marr-Hildreth算法是一个......
  • python实现盲反卷积算法
    python实现盲反卷积算法盲反卷积算法算法原理算法实现Python实现详细解释优缺点应用领域盲反卷积算法盲反卷积算法是一种图像复原技术,用于在没有先验知识或仅有有限信息的情况下,估计模糊图像的原始清晰图像和点扩散函数(PSF)。盲反卷积在摄影、医学成......