From c2201fab809b70dbcc048cacca10a14c5e2af764 Mon Sep 17 00:00:00 2001 From: Sauyon Lee Date: Thu, 15 Sep 2022 13:48:55 -0700 Subject: [PATCH] fix(multipart): support multipart file inputs to non-file descriptors --- bentoml/_internal/utils/formparser.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/bentoml/_internal/utils/formparser.py b/bentoml/_internal/utils/formparser.py index 019a1b01fbf..b2ba5efcd87 100644 --- a/bentoml/_internal/utils/formparser.py +++ b/bentoml/_internal/utils/formparser.py @@ -178,6 +178,13 @@ async def parse(self) -> _ItemsBody: return items +async def file_body_to_message(f: UploadFile): + return { + "type": "http.request", + "body": await f.read(), + } + + async def populate_multipart_requests(request: Request) -> t.Dict[str, Request]: content_type_header = request.headers.get("Content-Type") content_type, _ = multipart.parse_options_header(content_type_header) @@ -200,6 +207,10 @@ async def populate_multipart_requests(request: Request) -> t.Dict[str, Request]: req._form = FormData([(field_name, data)]) # type: ignore (using internal starlette APIs) if isinstance(data, bytes): req._body = data + else: + req._receive = ( # type: ignore (using internal starlette APIs) + file_body_to_message(data) + ) reqs[field_name] = req return reqs