Upload: clearer proxy 413 error, clean up after interrupted uploads
- Show a readable message when a reverse proxy rejects the archive with 413 - Delete the freshly created game if its archive upload fails - Turn ClientDisconnect during upload into a short 400 instead of a traceback Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
a97b46079e
commit
5d9ddb6376
3 files changed
+12
-3
No files matched your search
@@ -2,6 +2,7 @@ from typing import Annotated, Any
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Request, status
|
||||
from sqlalchemy import select
|
||||
from starlette.requests import ClientDisconnect
|
||||
|
||||
from app.deps import DB, CurrentUser, has_perm, require
|
||||
from app.models import GameVersion, Save, User
|
||||
@@ -57,10 +58,13 @@ async def upload_version(
|
||||
async for chunk in request.stream():
|
||||
f.write(chunk)
|
||||
size += len(chunk)
|
||||
except Exception:
|
||||
except Exception as e:
|
||||
remove_upload(version.id)
|
||||
await db.delete(version)
|
||||
await db.commit()
|
||||
if isinstance(e, ClientDisconnect):
|
||||
# usually a proxy in front cut the body off (e.g. its own 413)
|
||||
raise HTTPException(status.HTTP_400_BAD_REQUEST, "Загрузка прервана") from None
|
||||
raise
|
||||
if size == 0:
|
||||
remove_upload(version.id)
|
||||
|
||||
Reference in new issue
Block a user