diff options
| -rw-r--r-- | server/requirements.txt | 1 | ||||
| -rw-r--r-- | server/szurubooru/rest/app.py | 16 |
2 files changed, 7 insertions, 10 deletions
diff --git a/server/requirements.txt b/server/requirements.txt index 4dd6e7b..9edee1c 100644 --- a/server/requirements.txt +++ b/server/requirements.txt @@ -2,6 +2,7 @@ alembic>=0.8.5 certifi>=2017.11.5 coloredlogs==5.0 heif-image-plugin==0.7.0 +multipart>=1.3.0 numpy>=1.8.2 pillow-avif-plugin~=1.5.2 pillow>=4.3.0 diff --git a/server/szurubooru/rest/app.py b/server/szurubooru/rest/app.py index c098bd0..26bbc44 100644 --- a/server/szurubooru/rest/app.py +++ b/server/szurubooru/rest/app.py @@ -1,4 +1,4 @@ -import cgi +from multipart import parse_form_data, is_form_request import json import re import urllib.parse @@ -40,15 +40,11 @@ def _create_context(env: Dict[str, Any]) -> context.Context: files = {} params = dict(urllib.parse.parse_qsl(env.get("QUERY_STRING", ""))) - if "multipart" in env.get("CONTENT_TYPE", ""): - form = cgi.FieldStorage(fp=env["wsgi.input"], environ=env) - if not form.list: - raise errors.HttpBadRequest( - "ValidationError", "No files attached." - ) - body = form.getvalue("metadata") - for key in form: - files[key] = form.getvalue(key) + if is_form_request(env): + _, files = parse_form_data(env) + files = {n: f.raw for (n, f) in files.items()} + body = files["metadata"] + print(files) else: body = env["wsgi.input"].read() |