德塔云平台无法使用FastAPI上传文件

2023-12-09

当我通过运行此代码时uvicorn main:app一切正常,但是当我使用 Deta 运行它时,我得到Internal Server Error并且只有GET端点工作(POST一个甚至没有像应该的那样被调用)。 你能帮我么?提前致谢。

import os
from pathlib import Path

from fastapi import FastAPI, Form, UploadFile
from fastapi.responses import FileResponse, HTMLResponse

from pdfpad import pdfpad, save_pdf


app = FastAPI()


@app.post("/processfile/")
async def process_file(file: UploadFile) -> FileResponse:
    path = file.filename
    if os.getenv("DETA_RUNTIME") == "true":
        path = Path("/tmp") / file.filename
    saved_path = save_pdf(pdfpad(await file.read()), path)
    return FileResponse(saved_path)


@app.get("/")
async def main():
    content = """
        <body>
        <form action="/processfile/" enctype="multipart/form-data" method="post" id="form1">
        
        <label for file>Choose PDF:</label>
        file: <input name="file" type="file" form="form1">
        <br><br>
        
        <input type="submit">
        </form>
        </body>
    """
    return HTMLResponse(content=content)

德塔的限制非常严格。如图所示技术规格,Deta Micros(微型服务器)提供了只读仅文件系统/tmp可以写入,其存储限制为 512 MB。

Deta 提供两项附加服务,即德塔基地(完全托管的 NoSQL 数据库,您可以使用它来存储、查询、更新和删除数据库中的记录)以及德塔驱动器(一种可扩展的文件存储服务,可用于上传和存储文件)。

Deta Drive 正是您应该根据自己的情况寻找的驱动器。然而,根据文档,Deta Micros 的 HTTP 有效负载大小限制为 5.5 MB,这意味着如果您想上传大于 5.5 MB 的文件,则不能 — 除非您以 5.5 MB 的块大小将文件上传到 API,然后从您的 API 将文件重新上传到 Deta Drive,使用这个端点如果文件大小小于 10 MB;否则,如果文件大于 10 MB,则必须使用以下命令分块上传文件分块上传。按照上传分块部分:

每个块必须至少为 5 Mb,最多 10 Mb。最后一块 可以小于 5 Mb。

从您提供的代码片段来看,您似乎正在将文件写入/tmp目录,使用Path from pathlib模块。请尝试指定路径而不使用pathlib模块,并尝试使用指定目录./在开始时,例如:

path = Path("./tmp") / file.filename

你说你得到一个Internal Server Error,这是一个非常普遍的错误,并且很少说明错误的性质。您应该查看服务中的实际日志(logging可以找到例子here),这将告诉是什么导致应用程序失败。如果您提供完整的回溯,它将确实有助于识别问题。

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

德塔云平台无法使用FastAPI上传文件 的相关文章

  • 如何更改 FacetGrid 中的边距标题颜色

    使用 Seaborn Facet Grids 如何仅更改边距标题的颜色 注意g set titles color red 更改两个标题 p sns load dataset penguins sns displot data p x fli
  • 有没有一种方法可以将python对象直接存储在mongoDB中而不需要序列化它们

    我在某处读到过 您可以使用 BSON 将 python 对象 更具体地说是字典 作为二进制文件存储在 MongoDB 中 但是现在我找不到任何与此相关的文档 有人知道具体如何做到这一点吗 没有办法在不序列化的情况下将对象存储在文件 数据库
  • 上传时的 Google Drive API——这些额外的空行从何而来?

    总结一下该程序 我从我的 Google 云端硬盘下载一个文件 然后在本地计算机中打开并读取一个文件 file a txt 然后在我的计算机中打开另一个文件 file b txt 处于附加模式 并且在使用这个新的 file b 更新我的 Go
  • 将 transaction.commit_manually() 升级到 Django > 1.6

    我继承了为 Django 1 4 编写的应用程序的一些代码 我们需要更新代码库以使用 Django 1 7 并最终更新到 1 8 作为下一个长期支持版本 在一些地方它使用旧风格 transaction commit manually and
  • 如何使用 colorchecker 在 opencv 中进行颜色校准?

    我有数码相机获取的色彩检查器图像 我如何使用它来使用 opencv 校准图像 按照以下颜色检查器图像操作 您是想问如何进行颜色校准或如何使用 OpenCV 进行校准 为了进行颜色校准 您可以使用校准板的最后一行 灰色调 以下是您应该逐步进行
  • Python tkinter.filedialog Askfolder 干扰 clr

    我主要在 Spyder 中工作 构建需要弹出文件夹或文件浏览窗口的脚本 下面的代码在spyder中完美运行 在 Pycharm 中 askopenfilename工作良好 同时askdirectory什么都不做 卡住了 但是 如果在调试模式
  • 如何在Python中高效地添加稀疏矩阵

    我想知道如何在Python中有效地添加稀疏矩阵 我有一个程序 可以将大任务分解为子任务 并将它们分配到多个 CPU 上 每个子任务都会产生一个结果 一个 scipy 稀疏矩阵 格式为 lil matrix 稀疏矩阵尺寸为 100000x50
  • 更改 x 轴比例

    我使用 Matlab 创建了这个图 使用 matplotlib x 轴绘制大数字 例如 100000 200000 300000 我想要 1 2 3 和 10 5 之类的值来指示它实际上是 100000 200000 300000 有没有一
  • ValueError:不支持连续[重复]

    这个问题在这里已经有答案了 我正在使用 GridSearchCV 进行线性回归的交叉验证 不是分类器也不是逻辑回归 我还使用 StandardScaler 对 X 进行标准化 我的数据框有 17 个特征 X 和 5 个目标 y 观察 约11
  • CNTK 抱怨 LSTM 中的动态轴

    我正在尝试在 CNTK 中实现 LSTM 使用 Python 来对序列进行分类 Input 特征是固定长度的数字序列 时间序列 标签是 one hot 值的向量 Network input input variable input dim
  • Pandas:如何将数据框插入 Clickhouse

    我正在尝试将 Pandas 数据框插入 Clickhouse 这是我的代码 import pandas import sqlalchemy as sa uri clickhouse default localhost default ch
  • Python Pandas:如何对组中的所有项目进行分组并为其分配 id?

    我有 df domain orgid csyunshu com 108299 dshu com 108299 bbbdshu com 108299 cwakwakmrg com 121303 ckonkatsunet com 121303
  • 使用 Conda 更新特定模块会删除大量软件包

    我最近开始使用 Anaconda Python 发行版 因为它提供了许多开箱即用的数据分析库 使用 conda 创建环境和安装软件包也轻而易举 但是当我想更新 Python 本身或任何其他模块时 我遇到了一些严重的问题 我事先被告知我的很多
  • Django - 提交具有同一字段多个输入的表单

    预警 我对 Django 以及一般的 Web 开发 非常陌生 我使用 Django 托管一个基于 Web 的 UI 该 UI 将从简短的调查中获取用户输入 通过我用 Python 开发的一些分析来提供输入 然后在 UI 中呈现这些分析的可视
  • 从 python 检测 macOS 中的暗模式

    我正在编写一个 PyQt 应用程序 我必须添加一个补丁 以便在启用暗模式的 Macos 上可以读取字体 app QApplication Fix for the font colours on macos when running dark
  • Flask 应用程序的测试覆盖率不起作用

    您好 想在终端的 Flask 应用程序中测试 删除路由 我可以看到测试已经过去 它说 test user delete test app LayoutTestCase ok 但是当我打开封面时 它仍然是红色的 这意味着没有覆盖它 请有人向我
  • 字符串列表,获取n个元素的公共子串,Python

    我的问题可能类似于this https stackoverflow com questions 37514193 count the number of occurrences of n length not given string in
  • 导入错误:无法导入名称“时间戳”

    我使用以下代码在 python 3 6 3 中成功安装了 ggplot conda install c conda forge ggplot 但是当我使用下面的代码将其导入笔记本时 出现错误 from ggplot import Impor
  • 如何使用Python保存“完整的网页”而不仅仅是基本的html

    我正在使用以下代码来使用 Python 保存网页 import urllib import sys from bs4 import BeautifulSoup url http www vodafone de privat tarife r
  • python 中的 after() 与 update()

    我是 python 新手 开始使用 tkinter 作为画布 到目前为止 我使用 update 来更新我的画布 但还有一个 after 方法 谁能给我解释一下这个函数 请举个例子 两者之间有什么区别 root after integer c

随机推荐