def METHOD_NAME(file_service, share_name, directory_name, file_name,
                        file_size, block_size, stream, max_connections,
                        progress_callback, validate_content, timeout):
    uploader = _FileChunkUploader(
        file_service,
        share_name,
        directory_name,
        file_name,
        file_size,
        block_size,
        stream,
        max_connections > 1,
        progress_callback,
        validate_content,
        timeout
    )
    if progress_callback is not None:
        progress_callback(0, file_size)
    if max_connections > 1:
        import concurrent.futures
        executor = concurrent.futures.ThreadPoolExecutor(max_connections)
        range_ids = list(executor.map(uploader.process_chunk, uploader.get_chunk_offsets()))
    else:
        if file_size is not None:
            range_ids = [uploader.process_chunk(start) for start in uploader.get_chunk_offsets()]
        else:
            range_ids = uploader.process_all_unknown_size()
    return range_ids