adapter pattern upload