Hello,
executing actions / behaviors in reaction to read / download events (e.g. before or on download) are rather unusual requirements and this type of processing is currently not possible using the Alfresco policy mechanism. So in this instance, you would usually provide a special access operation (web script) that would deal with the necessary processing itself (either directly or by delegation to service / policy). This way, you could actually make sure that you only react to the correct event, since a lower level event like OnContentRead (as an alternative) would always be invoked when the content is accessed, not just when it is downloaded (e.g. for indexing purposes).
In terms of executing logic before content is stored in the file system, you have to understand the architecture of Alfresco. There is - from a purely behaviour-oriented technical perspective - no way to perform any kind of operation on content before it is stored in "a" file system. In the strictest sense, there isn't even the possibility for such logic irregardless of the approach used, as Alfresco will at least store the uploaded content as a temporary file on the local file system, before any further logic is invoked.
What you want to do is have some additional processing logic executed before it is stored in the final, backend storage. This you could achieve by implementing a custom Alfresco content store and content store writer. Based on your use case, you could implement this custom content store as a proxy / decorator which processes the content before, while and/or after it is being transferred to the backend storage.
Unfortunately, using this approach you are also not able to distinguish between uploads and internal content store moves, which may occur based on some business rules (e.g. moving from the default store to an archive store via XAM). An alternative would be to provide a special upload operation interface similar to a special download operation interface in which you are free to fully customize the way content is handled before passing it off to any storage, but can ensure you only react to proper upload requests.
I hope I this is of some help to you. The short form of this reply could be summarized as: "Using behaviours, you can only act on low-level content events, usually only after the basic logic (storage) has been executed, and may end up reacting to the wrong events due to difficulties in distinguishing real user from system internal events. Alternatives are possible, but require some custom code development."
Regards
Axel