重构file uploader