当我通过运行此代码时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(使用前将#替换为@)