Hi All, I've already sent this to Scott who asked the question but here was my go at a custom tag for file upload.... feel free to hack it to bits/comment on it's crapness but I think it is pretty much covering everything that you are discussing.... if you use it and improve it, please let me have a copy :-)
Also tests for a directory to put the file in (within your main upload location) and createds it if there isn't one Probably better ways of doing some of the stuff but I was fairly new to CF at the time. BTW developed on CF5 ------------ Useage ------------ <cf_rgufileupload rguFileFieldList="elmImageUpload" rguFileMaxSizeKb="50" rguFileUploadLocation="#sIF_UploadFolderImages#" rguNameConflict="MAKEUNIQUE" rguFilePutInFolder="FormID#SESSION.iIF_FormID#" > ------------ Start of custom tag ------------ <cfparam name="ATTRIBUTES.rguFileFieldList" default=""> <cfparam name="ATTRIBUTES.rguFileMaxSizeKb" default="5000"> <cfparam name="ATTRIBUTES.rguFileInvalidExtensions" default="cfml,cfm,asp,shtml,php,cgi,jsp,exe"> <cfparam name="ATTRIBUTES.rguFileValidMimeTypes" default="text/comma-seperated-values,text/plain,application/msword,appli cation/pdf,application/rtf,application/mspowerpoint,application/x-visio, application/excel,application/x-msexcel,application/x-compressed,applica tion/x-zip-compressed,application/vnd.ms-excel,application/x-excel,appli cation/zip,application/x-shockwave-flash,image/png,image/jpeg,image/gif" > <cfparam name="ATTRIBUTES.rguFileUploadLocation" default=""> <cfparam name="ATTRIBUTES.rguFilePutInFolder" default=""> <cfparam name="ATTRIBUTES.rguNameConflict" default="ERROR"> <!--- Set up parameters for file upload ---> <cfset CALLER.rguFileName = ""> <cfset CALLER.rguFileError = ""> <cfset CALLER.rguFileUploadVersion = "1.1"> <cfset lFileError = ""> <cfset lFileNames = ""> <cfset sFileName = ""> <cfset iFileSize = ""> <cfset sFileMimeType = ""> <cfset sFileClientExt = ""> <cfset lValidNameConfilict = "ERROR,SKIP,MAKEUNIQUE,OVERWRITE"> <!--- Check all the paramters ---> <cfif ATTRIBUTES.rguFileFieldList EQ ""> <cfset lFileError = ListAppend(lFileError,"You must specify at least one form field that contains a file to upload")> </cfif> <cfif NOT IsNumeric(ATTRIBUTES.rguFileMaxSizeKb)> <cfset lFileError = ListAppend(lFileError,"The maximum size of the file in Kb must be numeric")> </cfif> <cfif ATTRIBUTES.rguFileUploadLocation EQ ""> <cfset lFileError = ListAppend(lFileError,"You must specify an upload location")> </cfif> <cfif ListFindNoCase(lValidNameConfilict,ATTRIBUTES.rguNameConflict,",") EQ 0> <cfset lFileError = ListAppend(lFileError,"You must specify a valid name conflict parameter (Valid: #lValidNameConfilict#)")> </cfif> <cfif lFileError GT ""> <cfset CALLER.rguFileError = lFileError> <cfexit> </cfif> <!--- Test for the Base Upload directory ---> <cfif DirectoryExists(ATTRIBUTES.rguFileUploadLocation) EQ False> <cfset CALLER.rguFileError = ListAppend(CALLER.rguFileError,"The upload location you have specified does not exist")> <cfexit> </cfif> <!--- Original Upload Folder exists, see if we need to put it in a specific folder and if so test for it ---> <cfif ATTRIBUTES.rguFilePutInFolder GT ""> <cfif DirectoryExists("#ATTRIBUTES.rguFileUploadLocation#\#ATTRIBUTES.rguFileP utInFolder#") EQ False> <cftry> <cfdirectory action="create" directory="#ATTRIBUTES.rguFileUploadLocation#\#URLEncodedFormat(ATTRIBUT ES.rguFilePutInFolder)#"> <cfcatch type="ANY"> <cfset CALLER.rguFileError = ListAppend(CALLER.rguFileError,"Unable to create sub directory for file upload")> <cfexit> </cfcatch> </cftry> </cfif> <cfset rguFileFullPath = "#ATTRIBUTES.rguFileUploadLocation#\#URLEncodedFormat(ATTRIBUTES.rguFile PutInFolder)#"> <cfelse> <cfset rguFileFullPath = "#ATTRIBUTES.rguFileUploadLocation#"> </cfif> <!--- Now that the proper location has been established, can upload file ---> <cfloop list="#ATTRIBUTES.rguFileFieldList#" index="sFileField" delimiters=","> <cfif Evaluate("FORM.#sFileField#") GT ""> <cfset bFileUploaded = True> <cftry> <cffile action="upload" fileField="#sFileField#" destination="#rguFileFullPath#" nameConflict="#ATTRIBUTES.rguNameConflict#"> <cfcatch type="ANY"> <cfset bFileUploaded = False> </cfcatch> </cftry> <cfif bFileUploaded EQ True> <!--- File was uploaded ok, next get all the info about the newly uploaded file ---> <cfset sFileName = cffile.serverFile> <cfset iFileSize = ((cffile.fileSize)/1024)> <cfset sFileMimeType = cffile.contentSubType & "/" & cffile.contentSubType> <cfset sFileClientExt = cffile.ClientFileExt> <cfset bValidFile = True> <!--- Now we need to validate it against passed variables ---> <cfif ListFindNoCase(ATTRIBUTES.rguFileValidMimeTypes,sFileMimeType) GT 0> <cfset bValidFile = False> <cfset lFileError = ListAppend(lFileError,"The MIME type of the file '#sFileName#' is not valid.'")> </cfif> <cfif ListFindNoCase(ATTRIBUTES.rguFileInvalidExtensions,sFileClientExt) GT 0> <cfset bValidFile = False> <cfset lFileError = ListAppend(lFileError,"The client extension of the file '#sFileName#' is not a valid type.'")> </cfif> <cfif iFileSize GT ATTRIBUTES.rguFileMaxSizeKb> <cfset bValidFile = False> <cfset lFileError = ListAppend(lFileError,"The file '#sFileName#' is #Int(iFileSize)#Kb and the maximum allowed is #ATTRIBUTES.rguFileMaxSizeKb#Kb")> </cfif> <cfif bValidFile EQ False> <!--- This was not a valid upload, try and delete file then exit ---> <cftry> <cffile action="delete" file="#rguFileFullPath#\#sFileName#"> <cfcatch type="ANY"> <!--- Who cares, its not there anyway ---> </cfcatch> </cftry> <cfelse> <cfset lFileNames = ListAppend(lFileNames, sFileName)> </cfif> <cfelse> <cfset lFileError = ListAppend(lFileError,"There has been an error in uploading your file. Please ensure that you have selected one.")> </cfif> <cfelse> <!--- Must put in something as CF ignores empty list elements ---> <cfset lFileNames = ListAppend(lFileNames, "NOFILE")> <cfset lFileError = ListAppend(lFileError,"The file upload field '#sFileField#' was empty")> </cfif> </cfloop> <!--- Watch for unspecified error ---> <cfif sFileName EQ "" AND lFileError EQ ""> <cfset CALLER.rguFileError = ListAppend(CALLER.rguFileError,"An unspecified error has occurred.")> </cfif> <cfset CALLER.rguFileName = lFileNames> <cfset CALLER.rguFileError = lFileError> <cfexit> ------------ End of custom tag ------------ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| Archives: http://www.houseoffusion.com/cf_lists/index.cfm?forumid=4 Subscription: http://www.houseoffusion.com/cf_lists/index.cfm?method=subscribe&forumid=4 FAQ: http://www.thenetprofits.co.uk/coldfusion/faq Signup for the Fusion Authority news alert and keep up with the latest news in ColdFusion and related topics. http://www.fusionauthority.com/signup.cfm Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4