Как вернуть изображение в fastAPI? - PullRequest
0 голосов
/ 26 апреля 2019

Используя модуль python fastAPI , я не могу понять, как вернуть изображение.В колбе я бы сделал что-то вроде этого:

@app.route("/vector_image", methods=["POST"])
def image_endpoint():
    # img = ... # Create the image here
    return Response(img, mimetype="image/png")

что такое соответствующий вызов в этом модуле?

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Это еще не правильно задокументировано, но вы можете использовать что угодно из Starlette.

Итак, вы можете использовать FileResponse, если это файл на диске с путем: https://www.starlette.io/responses/#fileresponse

Если это файлоподобный объект, созданный в вашей операции path , в следующей стабильной версии Starlette (используемой внутри FastAPI) вы также сможете вернуть его в StreamingResponse.

0 голосов
/ 29 апреля 2019

Ответ от @ SebastiánRamírez указал мне верное направление, но для тех, кто хотел решить проблему, мне понадобилось несколько строк кода, чтобы она заработала.Мне нужно edto импортировать FileResponse из старлета (не fastAPI?), Добавить поддержку CORS и вернуться из временного файла.Возможно, есть лучший способ, но я не смог запустить потоковую передачу:

from starlette.responses import FileResponse

app = FastAPI()
app.add_middleware(
    CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"]
)

def image_endpoint(*, item: Item):
    # Returns a raw PNG from the document vector

    with tempfile.NamedTemporaryFile(mode="w+b", suffix=".png", delete=False) as FOUT:
        FOUT.write(img)
        return FileResponse(FOUT.name, media_type="image/png")


...