Upload framework