Listing 1: Checking file upload completion

<CFFUNCTION NAME="onAdd" ACCESS="public" RETURNTYPE="string">
<CFARGUMENT NAME="CFEvent" TYPE="struct" REQUIRED="yes">
<CFSCRIPT>
thisFile = cfevent.data.filename;
fileRead = createObject("java","java.io.FileInputStream");
thisThread = CreateObject("java", "java.lang.Thread");
fileRead.init(thisFile);
loopCT = 1;
while (1 EQ 1){
sizeA = fileRead.available();
thisThread.sleep(1000);
sizeB = fileRead.available();
if (sizeA EQ sizeB){
thisThread.sleep(1000);
sizeC = fileRead.available();
if (sizeC EQ sizeB){
break;
}
}
incrementValue(loopCT);
if (loopCT GT 60){
fileRead.close();
return ;
}
}
fileRead.close();
</CFSCRIPT>
<CFFILE ACTION="READ" FILE="#thisFile#" VARIABLE="fileContent">
<CFRETURN >
</CFFUNCTION>


Listing 2: Checking for file lock

<CFFUNCTION NAME="onAdd" ACCESS="public" RETURNTYPE="string">
<CFARGUMENT NAME="CFEvent" TYPE="struct" REQUIRED="yes">	
<CFSCRIPT>
thisFile = cfevent.data.filename;
fileRead = createObject("java","java.io.FileInputStream");
thisThread = CreateObject("java", "java.lang.Thread");	
loopCT = 1;
while (1 EQ 1){
try {
fileRead.init(thisFile);
break;
} catch(any ecpt){
thisThread.sleep(1000);
}
incrementValue(loopCT);
if (loopCT GT 60){
fileRead.close();
return;
}
}
fileRead.close();
</CFSCRIPT>
<CFRETURN >
</CFFUNCTION>

Listing 3: Checking for file lock and upload completion.

<CFFUNCTION NAME="onAdd" ACCESS="public" RETURNTYPE="string">
	<CFARGUMENT NAME="CFEvent" TYPE="struct" REQUIRED="yes">		
	<CFSCRIPT>
		thisFile = cfevent.data.filename;
		fileRead = createObject("java","java.io.FileInputStream");
		thisThread = CreateObject("java", "java.lang.Thread");		
		loopCT = 1;
		while (1 EQ 1){
			try {
				fileRead.init(thisFile);
				break;					
			} catch(any ecpt){
				thisThread.sleep(1000);
			}
			incrementValue(loopCT);
			if (loopCT GT 60){
				fileRead.close();
				return;
			}
		}

		loopCT = 1;
		while (1 EQ 1){
			sizeA = fileRead.available();
			thisThread.sleep(1000);
			sizeB = fileRead.available();
			if (sizeA EQ sizeB){
				thisThread.sleep(1000);
				sizeC = fileRead.available();
				if (sizeC EQ sizeB){
					break;
				}
			}
			incrementValue(loopCT);

			if (loopCT GT 60){
				fileRead.close();
				return;
			}
		}
		fileRead.close();
	</CFSCRIPT>
	<CFRETURN >
</CFFUNCTION>

Listing 4: Using an Exclusion list
 
<CFSCRIPT>
exclusionList = "bat,dll,exe,zip";
theFileName = listLast(CFEvent.data.filename, "\");
 if (left(theFileName, 1) EQ "."){ //handle file delete }
 
theFileExtension = ListLast(theFileName, ".");
 if (listFindNocase(exclusionList, theFileExtension)){ // handle excluded file } </CFSCRIPT>