CMFCore has a File type. It keeps metadata in the ZODB and stored the file content itself as "blob" on the file system. The filename is derived from the "oid" and the "serial" - but, if necessary, it can be determined from information found in the ZODB (e.g. for backup/recovery purposes).
CMFCore contains the base functionality. The user interface part used to be in CMFDefault (and other systems, such as e.g. Plone). CMFDefault was termorarily unmaintained but I think I saw recent CMFDefaullt related activity on "github`.