when it comes to files, I would recommend making them part of messages. While they could theoretically work as part of the payload of commands and queries, the contents of the files probably don’t have a specific added value to the validation of the commands. In terms of queries, you probably want to stream large contents slightly differently than how you would return structured data.
Instead, try to store the file as early as possible in some storage, and include a reference to the file in the commands, events and queries.
I’ve taken this approach in one of my first projects. Files were “add-only” and the identifier was generated based on the contents of the file (hash) so that appending the same file twice would not have it stored twice. In this particular system, it was common that the same file was uploaded by several users. And yes, this makes the file storage part of the truth as well, although the events are still the only thing describing what happened. So even if you were able to remove files from that storage, you can still see someone uploaded a file and removed it later (although you won’t be able to access the filte’s contents anymore).