The user model of a file is (usually) a contiguous array of bytes, which may be read, written, and extended (appended to). This is rather analagous to the heap segement of a process in memory, which is also a contiguous array of bytes, which may also be read, written and extended. In the case of files, too, there is contention for space between all the files on the disk. Space must be allocated between thousands of files, each of which may sometimes need to be extended.
One of the jobs of the filesystem is to manage the blocks on the disk, to create the illusion of many contiguous files, organised into directories.
This model of files, and also typically a hierarchical directory structure, must be implemented in terms of blocks on a disk (or other block device).