📤 File Upload Helper
The upload
helper provides a complete solution for handling file
uploads in your application,
including validation, security checks, and translation support.
This helper automatically handles:
- HTTP method validation (POST only)
- Content-Type validation (multipart/form-data)
- File extension validation
- File size limits
- Empty file detection
- Secure filename handling
- Automatic directory creation
- Translation support for error messages
📋 Parameters
The upload
function accepts these parameters:
Parameters
request: Request # Starlette request object
name_file: str | list # Field name for file upload (default: 'file')
UPLOAD_DIR: str # Directory to save files (default: 'uploads')
ALLOWED_EXTENSIONS: set # Allowed file extensions (default: {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'})
MAX_FILE_SIZE: int # Maximum file size in bytes (default: 10MB)
🚀 Usage Example
Route Implementation
from lila.core.files import upload
@router.route("/upload", methods=["POST"])
async def uploadFile(request: Request):
response = await upload(request=request, name_file="file")
return response
🎨 Frontend Implementation
HTML + JavaScript
<form onsubmit="upload(event);">
<fieldset>
<input type="file" name="file" required>
</fieldset>
<button type="submit">
<i class="icon-check-circle"></i>
Upload Files
</button>
</form>
<script>
async function upload(event) {
event.preventDefault();
const formElement = event.target;
const formData = new FormData(formElement);
try {
const response = await fetch('/upload', {
method: 'POST',
body: formData,
});
const result = await response.json();
if (!response.ok) throw new Error(result.message);
alert('File uploaded successfully!');
} catch (error) {
alert(error.message);
}
}
</script>
📨 Response Format
The helper returns a JSONResponse with this structure:
Success Response
{
"file": "/uploads/filename.ext",
"success": true,
"message": "File uploaded successfully"
}
Error Response
{
"error": true,
"success": false,
"message": "Error message in user's language"
}
Important Notes
If you are using Windows or the file is not created in the Path, remember to
configure it in app/config.py
app/config.py
PATH_UPLOADS = path.join(os.getcwd(), "public", "img", "uploads")