簡體   English   中英

使用 FastAPI 上傳文件操作在 Deta 雲平台上不起作用

[英]Upload File operation using FastAPI does not work on Deta Cloud Platform

當我通過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 非常嚴格。 Technical Specifications所示,Deta Micros(微型服務器)提供了一個只讀文件系統,只能寫入/tmp ,它有 512 MB 的存儲限制。

Deta 提供了兩個額外的服務,即Deta Base (一個完全托管的 NoSQL 數據庫,您可以使用它來存儲、查詢、更新和刪除數據庫中的記錄)和Deta Drive (一個可擴展的文件存儲服務,您可以使用它上傳和存儲文件)。

Deta Drive 是您應該尋找的那種。 但是,根據文檔,Deta Micros 的 HTTP 負載大小限制為 5.5 MB,這意味着如果您想上傳大於 5.5 MB 的文件,則不能——除非您將文件分塊上傳到 API 5.5 MB,然后從您的 API 將文件重新上傳到 Deta Drive,如果文件大小小於 10 MB,則使用此端點 否則,如果文件大於 10 MB,則必須使用chunked upload 分塊上傳文件。 根據上傳分塊部分

每個塊必須至少為 5 Mb,最多為 10 Mb。 最終塊可以小於 5 Mb。

從您提供的代碼片段來看,您似乎正在使用pathlib模塊中的Path將文件寫入/tmp目錄。 請嘗試指定路徑而不使用pathlib模塊,以及嘗試以./開頭指定目錄,例如:

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

你說你得到一個Internal Server Error ,這是一個非常普遍的錯誤,並且很少說明錯誤的性質。 相反,您應該查看服務中的實際日志(可以在此處找到logging示例),它會告訴您是什么導致應用程序失敗。 如果您提供了完整的回溯,那將真正有助於確定問題。

該錯誤是由於缺少poppler-utils而發生的,與 FastApi 無關。

我的程序需要 linux 包poppler-utils來處理 pdf 文件。 由於 Deta cloud 沒有並且不允許用戶執行任何... apt install...命令,因此發生了上述錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM