web-backend/uploadBlob/__init__.py (48 lines of code) (raw):
import logging
import azure.functions as func
import json
import base64
from backendUtils.blob_functions import write_to_blob
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info("Python HTTP trigger function processed a request for uploadBlob.")
try:
# Parse request body
req_body = req.get_json()
# Validate required fields
if not req_body or 'container' not in req_body or 'filename' not in req_body or 'fileContent' not in req_body:
return func.HttpResponse(
"Request body must contain 'container', 'filename', and 'fileContent' fields",
status_code=400
)
container_name = req_body['container']
filename = req_body['filename']
file_content_base64 = req_body['fileContent']
# Validate container name
valid_containers = ['bronze', 'silver', 'gold']
if container_name not in valid_containers:
return func.HttpResponse(
f"Container name must be one of: {', '.join(valid_containers)}",
status_code=400
)
# Decode base64 content
try:
file_content = base64.b64decode(file_content_base64)
except Exception as e:
return func.HttpResponse(
f"Error decoding file content: {str(e)}",
status_code=400
)
# Upload to blob storage using the utility function
write_to_blob(container_name, filename, file_content)
# Return success response with blob details
result = {
"success": True,
"container": container_name,
"filename": filename,
"sizeBytes": len(file_content)
}
return func.HttpResponse(
json.dumps(result),
mimetype="application/json",
status_code=200
)
except Exception as e:
logging.error(f"Error in uploadBlob: {str(e)}")
return func.HttpResponse(
f"Error uploading file: {str(e)}",
status_code=500
)