Ok, I've structured it so the following happens:
1. User submits form
2. Submitted textual data is validated using validate method of projects component
3.
a) If there are no errors with the textual data then the upload method of the projects component is called and consequently the cffile function, the upload method returns a struct containing information on the filename and whether the upload was a success or not.
b) If there are errors the user is prompted to correct them and submit again.
4. If there are no errors returned from the upload function then the project (textual data complete with the names of the uploaded files) is entered into the database.
5. A success message is displayed.
I have opted to create a separate function for each file type as I need to use different functions depending on the file type, for instance the image file requires resizing so i'm using a third party app for that cfx_imagecr3. This allows me to organise my error messages a little bit better. It would take me a while to code a function to deal with any filetype correctly, it seems the better method conceptually but perhaps this is something i could into in the future.
This is all working now save for a problem i had the other day with the arguments of the create method in the projects component which is i want to use the correct data types with my cfqueryparam calls see this post :
http://bytes.com/answers/coldfusion/...n-date-row-1-a