Python3.8 - FastAPI 和无服务器 (AWS Lambda) - 无法处理发送到 api 端点的文件

2024-04-01

我已经通过 AWS Lambda 函数将 FastAPI 与无服务器结合使用几个月了,效果非常好。

我正在创建一个新的 api 端点,它需要发送一个文件。

在我的本地计算机上使用时它工作得很好,但是当我部署到 AWS Lambda 时,当我尝试使用与本地工作完全相同的文件调用我的端点时,出现以下错误。我目前正在通过 swagger UI 进行测试,除了运行代码的“机器”之外,我的无服务器或本地机器之间没有任何变化。

你知道发生了什么事吗?

Python 3.8 快速API 0.54.1

My code:

from fastapi import FastAPI, File, UploadFile
import pandas as pd

app = FastAPI()

@app.post('/process_data_import_quote_file')
def process_data_import_quote_file(file: UploadFile = File(...)): # same error if I put bytes instead of UploadFile
    file = file.file.read()
    print(f"file {file}")
    quote_number = pd.read_excel(file, sheet_name='Data').iloc[:, 0].dropna()

最后一行失败

我尝试打印该文件,当我将打印的数据与本地读取的数据进行比较时,发现有所不同。我发誓这与我在 2 上使用的文件相同,所以我不知道什么可以解释这一点? 这是一个非常基本的 Excel 文件,没有什么特别的。

[ERROR] 2020-05-07T14:25:17.878Z    25ff37a5-e313-4db5-8763-1227e8244457    Exception in ASGI application

Traceback (most recent call last):
  File "/var/task/mangum/protocols/http.py", line 39, in run
    await app(self.scope, self.receive, self.send)
  File "/var/task/fastapi/applications.py", line 149, in __call__
    await super().__call__(scope, receive, send)
  File "/var/task/starlette/applications.py", line 102, in __call__
    await self.middleware_stack(scope, receive, send)
  File "/var/task/starlette/middleware/errors.py", line 181, in __call__
    raise exc from None
  File "/var/task/starlette/middleware/errors.py", line 159, in __call__
    await self.app(scope, receive, _send)
  File "/var/task/starlette/exceptions.py", line 82, in __call__
    raise exc from None
  File "/var/task/starlette/exceptions.py", line 71, in __call__
    await self.app(scope, receive, sender)
  File "/var/task/starlette/routing.py", line 550, in __call__
    await route.handle(scope, receive, send)
  File "/var/task/starlette/routing.py", line 227, in handle
    await self.app(scope, receive, send)
  File "/var/task/starlette/routing.py", line 41, in app
    response = await func(request)
  File "/var/task/fastapi/routing.py", line 196, in app
    raw_response = await run_endpoint_function(
  File "/var/task/fastapi/routing.py", line 150, in run_endpoint_function
    return await run_in_threadpool(dependant.call, **values)
  File "/var/task/starlette/concurrency.py", line 34, in run_in_threadpool
    return await loop.run_in_executor(None, func, *args)
  File "/var/lang/lib/python3.8/concurrent/futures/thread.py", line 57, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/var/task/app/quote/processing.py", line 100, in process_data_import_quote_file
    quote_number = pd.read_excel(file, sheet_name='Data').iloc[:, 0].dropna()
  File "/var/task/pandas/io/excel/_base.py", line 304, in read_excel
    io = ExcelFile(io, engine=engine)
  File "/var/task/pandas/io/excel/_base.py", line 821, in __init__
    self._reader = self._engines[engine](self._io)
  File "/var/task/pandas/io/excel/_xlrd.py", line 21, in __init__
    super().__init__(filepath_or_buffer)
  File "/var/task/pandas/io/excel/_base.py", line 355, in __init__
    self.book = self.load_workbook(BytesIO(filepath_or_buffer))
  File "/var/task/pandas/io/excel/_xlrd.py", line 34, in load_workbook
    return open_workbook(file_contents=data)
  File "/var/task/xlrd/__init__.py", line 115, in open_workbook
    zf = zipfile.ZipFile(timemachine.BYTES_IO(file_contents))
  File "/var/lang/lib/python3.8/zipfile.py", line 1269, in __init__
    self._RealGetContents()
  File "/var/lang/lib/python3.8/zipfile.py", line 1354, in _RealGetContents
    fp.seek(self.start_dir, 0)
ValueError: negative seek value -62703616

这是由于 AWS API Gateway。

我必须继续在 API Gateway 中允许 multipart/form-data 并纠正file = BytesIO(file).read()能够正确使用文件流。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3.8 - FastAPI 和无服务器 (AWS Lambda) - 无法处理发送到 api 端点的文件 的相关文章

随机推荐

  • RubyKoans:破损的公案?

    可能是业余爱好者的标志 我想知道问题是否出在公案 而不是我 但是 考虑一下这个公案 def test calling global methods without parentheses result my global method 2
  • 取消 ChangeNotifier 内的 Firebase 监听器

    当我尝试取消 Firestore 侦听器时ProductsService cancel 我收到错误 错误 flutter lib ui ui dart state cc 209 未处理的异常 LateInitializationError
  • JSF 2.0 validateRegex 带有自己的验证器消息

    我有一个与此类似的代码
  • 控制 Akka 中消耗大量内存的 actor 的生成

    我使用 akka 的 actor 模型构建了一个分布式流机器学习模型 通过向 Actor 发送训练实例 训练数据 来异步训练模型 对这些数据的训练会占用计算时间并改变参与者的状态 目前我正在使用历史数据来训练模型 我想运行一堆不同配置的模型
  • 如何用时刻设置时区?

    我正在使用 moment 来获取服务器时间 moment tz setDefault Asia Kolkata var now new Date var p date moment tz now zone format 插入时间 p dat
  • 在 DevExpress 中计算 ASPxGridview 列

    我有一个ASPxGridview 通常是 21 列 但我只想要处理 4 列 每列都有一个十进制值 MV EDDIE列为空 我想要的是 以编程方式计算 MV EDDIE列是RISK EUR IPOTEK MV BERND 只有在GroupSu
  • Spring 3.1 @Cacheable - 方法仍然执行

    我正在尝试按照解释实现 Spring 3 1 缓存here http www javacodegeeks com 2011 02 spring 31 cache abstraction tutorial html and here http
  • 带条件的 foreach 循环

    我可以用多个条件进行循环 如下所示 for int i 0 condition1 condition2 conditionN i 有没有办法使用 foreach 来做到这一点 foreach var i in arr and while c
  • 入口点不能用“async”修饰符标记

    我从下面复制了代码this http blogs msdn com b csharpfaq archive 2012 06 26 understanding a simple async program aspx链接 但是当我编译这段代码时
  • JQuery,分层表分页

    多次询问分层表和表分页 但我正在寻找他们两个 我已经在我的应用程序中使用 JQuery 因此使用相同的插件将会很有用 但我愿意接受任何建议 目前 我设法使用一些 jQuery 插件来显示分层数据 并添加了我自己的分页方法 但它还不够 我正在
  • 使用 mysql-server docker 容器在多个服务器上创建 MySQL 集群

    我正在尝试使用以下命令创建一个包含 3 个节点的 MySQL 集群mysql 服务器 https hub docker com r mysql mysql server 码头集装箱 I have 3个独立的云实例并且 docker 已在所有
  • Kafka Connect - 删除带有配置的连接器?

    我知道如何删除 Kafka 连接器 如此处所述Kafka Connect 如何删除连接器 https stackoverflow com questions 48947250 kafka connect how to delete a co
  • Ruby:#map 对于 bang 方法通常没有意义,是吗?

    这个问题的灵感来自于这个问题 Ruby 为什么这种使用地图的方式会抛出错误 https stackoverflow com questions 41853364 ruby why does this way of using map thr
  • 收到 ValueError: invalidliteral for int() with base 10: '' 错误并且不知道为什么

    我知道以前曾问过这个问题 但就我的情况而言 我似乎无法弄清楚为什么会抛出这个问题 当我尝试运行计算时 控制台出现以下错误 ValueError invalid literal for int with base 10 它说它来自 File
  • ActiveRecord 在 Ruby 1.9.2-rc1 下以 ASCII-8Bit 返回数据

    进一步说明标题 当从 ActiveRecord 加载数据时 尽管我尽了最大努力强制编码 但编码始终设置为 ASCII 8Bit 我在这里输入了尽可能多的详细信息 以尝试构建一个好的错误报告 有人可以用来帮助我 该项目使用以下技术 帕德里诺框
  • 正则表达式中从末尾开始的最短匹配

    给定一个输入字符串fooxxxxxxfooxxxboo我正在尝试编写一个匹配的正则表达式fooxxxboo即从第二个 foo 开始直到最后一个 boo 我尝试了以下方法 foo boo匹配完整的字符串fooxxxxxxfooxxxboo f
  • strcpy 到 mmap 地址返回总线错误

    我创建了一个进程 它调用设置了 MAP SHARED 标志的 mmap 当我尝试将字符串复制到该地址时 我收到总线错误核心转储 有人可以解释一下其背后的原因以及如何修复它 以下是我的代码 int main int fd 0 char ret
  • 停止/启动远程 Windows 服务并等待其打开/关闭

    最高答案这个问题 https stackoverflow com questions 187836 how do i restart a service on a remote machine in windows告诉我如何停止 启动远程服
  • Android 工具栏标题

    无法更改工具栏标题我在其中设置了标题manifeast xml 还使用了setTitle TITLE 我将标题设置为历史与报告但它显示不同的标题通知这是另一个活动标题 我检查了manifeast xml但没有变化 任何人都可以帮助我吗 这是
  • Python3.8 - FastAPI 和无服务器 (AWS Lambda) - 无法处理发送到 api 端点的文件

    我已经通过 AWS Lambda 函数将 FastAPI 与无服务器结合使用几个月了 效果非常好 我正在创建一个新的 api 端点 它需要发送一个文件 在我的本地计算机上使用时它工作得很好 但是当我部署到 AWS Lambda 时 当我尝试