📤 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:

📋 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")