upload-fn-fix
All checks were successful
Deploy on Push / deploy (push) Successful in 31s

This commit is contained in:
Untone 2024-05-06 15:05:52 +03:00
parent acb6f291d3
commit fc7bca08f8

31
main.py
View File

@ -3,6 +3,7 @@ import os
import tempfile import tempfile
import uuid import uuid
import aiobotocore.session import aiobotocore.session
import asyncio
from starlette.applications import Starlette from starlette.applications import Starlette
from starlette.responses import JSONResponse from starlette.responses import JSONResponse
from starlette.routing import Route from starlette.routing import Route
@ -35,43 +36,39 @@ async def create_s3_client():
@login_required @login_required
async def upload_handler(request: Request): async def upload_handler(request: Request):
logging.debug("Received upload request") logger.debug("Received upload request")
form = await request.form() form = await request.form()
file = form.get("file") file = form.get("file")
if file is None: if file is None:
logging.error("No file uploaded") logger.error("No file uploaded")
return JSONResponse({"error": "No file uploaded"}, status_code=400) return JSONResponse({"error": "No file uploaded"}, status_code=400)
file_name, file_extension = os.path.splitext(file.filename) file_name, file_extension = os.path.splitext(file.filename)
key = str(uuid.uuid4()) + file_extension key = str(uuid.uuid4()) + file_extension
logging.debug(f"Generated file key: {key}") logger.debug(f"Generated file key: {key}")
s3 = await create_s3_client() s3 = await create_s3_client()
with tempfile.NamedTemporaryFile() as tmp_file:
while True:
chunk = await file.read(8192)
if not chunk:
break
tmp_file.write(chunk)
tmp_file.flush()
logging.debug("Starting file upload to S3") logger.debug("Starting file upload to S3")
await s3.upload_file( async with file.open("rb") as f:
Filename=tmp_file.name, content = await f.read()
await s3.put_object(
Bucket=STORJ_BUCKET_NAME, Bucket=STORJ_BUCKET_NAME,
Key=key, Key=key,
ExtraArgs={"ContentType": file.content_type}, Body=content,
ContentType=file.content_type,
) )
logging.debug("File upload completed") logger.debug("File upload completed")
url = f"http://{CDN_DOMAIN}/{key}" url = f"http://{CDN_DOMAIN}/{key}"
logging.info(f"File uploaded successfully: {url}") logger.info(f"File uploaded successfully: {url}")
return JSONResponse({"url": url, "originalFilename": file.filename}) return JSONResponse({"url": url, "originalFilename": file.filename})
async def home(request: Request): async def home(request: Request):
logging.debug("Home route called") logger.debug("Home route called")
return JSONResponse({"message": "Hello World!"}) return JSONResponse({"message": "Hello World!"})