Entries for month: April 2008

Postlet Coldfusion upload handler

This is just a quick follow up on my Postlet post from yesterday.  I have a simple upload handler written for Postlet, with configuration options and debug capability.  Have fun ;)


 


<br /><br />   <!--<span class='cc_comment'>-//<br /></span>***************************************************<br />      Configuration, change things here for your setup<br />      ***************************************************<br /><span class='cc_comment'>   //---><br /></span><cfscript><br /><span class='cc_comment'>   // Set upload directory here, use any<br /></span><span class='cc_comment'>// notation acceptable by expandPath()<br /></span>   uploadDir = /assets/uploads/;<br />      <br />   <span class='cc_comment'>   // Set folder name to drop files into<br /></span><span class='cc_comment'>// You can leave this blank to put all<br /></span><span class='cc_comment'>   // images into the root, or set to a variable<br /></span><span class='cc_comment'>// to use an incoming url based argument<br /></span><span class='cc_comment'>   // to set to a fixed string, use = foldername<br /></span><span class='cc_comment'>// to set to a URL argument, use = url.varName<br /></span><span class='cc_comment'>   // to set no sub-folder, use = <br /></span>uploadFolder = url.folder;<br />      <br />   <span class='cc_comment'>   // Allowable file extensions<br /></span>allowedExt = jpg,png,gif;<br />      <br />   <span class='cc_comment'>   // optionally check the host page and block<br /></span><span class='cc_comment'>// the request if the host is not appropriate<br /></span>   checkHost = true;<br />      hostURL = your host name here ie google.com, microsoft.com;<br />      <br />   <span class='cc_comment'>   // If you would like debug output, set debugmode <br /></span><span class='cc_comment'>// to true, and set a file to be written with output<br /></span>   debugMode = true;<br />      debugFile = c:\\uploadTest.html;<br />   </cfscript><br />   <br />   <!--<span class='cc_comment'>-// <br /></span>*************************************************** <br />      This is where things happen, you probably dont need<br />      to mess with this ;)<br />      ***************************************************<br /><span class='cc_comment'>   //---><br /></span><br /><!--<span class='cc_comment'>-// Default ret value to success //---><br /></span><cfset ret = success /><br /><br />   <!--<span class='cc_comment'>-// Validate refer //---><br /></span><cfif checkHost AND not findNoCase(CGI.HTTP_HOST, hostURL)><br />   <cfset ret = errorInvalidHost><br />   </cfif><br />   <br />   <!--<span class='cc_comment'>-// Determine final filesystem location of files //---><br /></span><cfif url.folder neq ><br />   <cfset serverDirectory = expandPath(uploadDir & uploadFolder) /><br />   <cfelse><br />      <cfset serverDirectory = expandPath(uploadDir) />      <br />   </cfif>   <br />   <br />   <!--<span class='cc_comment'>-// Create directory if necessary //---><br /></span><cfif ret eq success AND not directoryExists(serverDirectory)><br />   <cftry><br />         <cfdirectory action=<span class='cc_value'>"create"</span> directory=<span class='cc_value'>"#serverDirectory#"</span> /><br />         <br />         <cfcatch type=<span class='cc_value'>"any"</span>><br />            <cfset ret = errorCreatingDirectory /><br />            <cfset err = cfcatch /><br />         </cfcatch><br />      </cftry><br />   </cfif><br />   <br />   <!--<span class='cc_comment'>-// Save file if no errors this far //---><br /></span><cfif ret eq success><br />   <cftry><br />         <cffile action=<span class='cc_value'>"upload"</span> filefield=<span class='cc_value'>"USERFILE"</span> destination=<span class='cc_value'>"#serverDirectory#"</span> nameconflict=<span class='cc_value'>"makeunique"</span> /><br />         <br />         <cfcatch type=<span class='cc_value'>"any"</span>><br />            <cfset ret = errorSavingFile /><br />            <cfset err = cfcatch /><br />         </cfcatch><br />      </cftry><br />   </cfif><br />   <br />   <!--<span class='cc_comment'>-// Make sure the file is of acceptable type //---><br /></span><cfif ret eq success AND not listFindNoCase(allowedExt, Cffile.serverFileExt)><br />   <!--<span class='cc_comment'>-// File is not of type allowed, delete it and return error //---><br /></span><cffile action=<span class='cc_value'>"delete"</span> file=<span class='cc_value'>"#serverDirectory#\\#CFFile.ServerFile#"</span> /><br />      <br />      <cfset ret = fileTypeNotAllowed /><br />   </cfif><br />   <br /><br />   <cfsavecontent variable=<span class='cc_value'>"response"</span>><br />   <br />   <cfswitch expression=<span class='cc_value'>"#ret#"</span>><br />      <cfcase value=<span class='cc_value'>"errorCreatingDirectory,errorInvalidHost"</span>><br />         <cfheader statuscode=<span class='cc_value'>"500"</span> statustext=<span class='cc_value'>"HTTP/1.1 500 Internal Server Error"</span>><br />         <cfcontent reset=<span class='cc_value'>"true"</span> /><br />         <cfoutput>POSTLET REPLY#chr(10)##chr(13)#POSTLET:NO#chr(10)##chr(13)#POSTLET:SERVER ERROR#chr(10)##chr(13)#POSTLET:ABORT THIS#chr(10)##chr(13)#END POSTLET REPLY#chr(10)##chr(13)#</cfoutput>      <br />      </cfcase><br />      <cfcase value=<span class='cc_value'>"fileTypeNotAllowed"</span>><br />         <cfheader statuscode=<span class='cc_value'>"403"</span> statustext=<span class='cc_value'>"HTTP/1.1 403 Forbidden"</span>><br />         <cfcontent reset=<span class='cc_value'>"true"</span> /><br />         <cfoutput>POSTLET REPLY#chr(10)##chr(13)#POSTLET:NO#chr(10)##chr(13)#POSTLET:FILE TYPE NOT ALLOWED#chr(10)##chr(13)#POSTLET:ABORT THIS#chr(10)##chr(13)#END POSTLET REPLY#chr(10)##chr(13)#</cfoutput>      <br />      </cfcase><br />      <cfdefaultcase><br />         <cfcontent reset=<span class='cc_value'>"true"</span> /><br />         <cfoutput>POSTLET REPLY#chr(10)##chr(13)#POSTLET:YES#chr(10)##chr(13)#END POSTLET REPLY#chr(10)##chr(13)#</cfoutput>   <br />      </cfdefaultcase><br />   </cfswitch><br />   <br />   </cfsavecontent><br /><br /></cfsilent><cfoutput>#response#</cfoutput><cfsilent><br /><br />   <!--<span class='cc_comment'>-// If in debug mode, write results to a debug file //---><br /></span><cfif debugMode><br />   <cfsavecontent variable=<span class='cc_value'>"debugText"</span>><br />         <cfoutput><br />         Response: #ret#<br /><br />         Output: [#response#]         <br />         <cfif isDefined(<span class='cc_value'>"Cffile"</span>)><br />         <p><br />            <h1>File Details</h1><br />            <cfdump var=<span class='cc_value'>"#CFFile#"</span>><br />         </p><br />         </cfif><br />         <cfif structKeyExists(variables, <span class='cc_value'>"err"</span>)><br />         <p><br />            <h1>Error Details</h1><br />            <cfdump var=<span class='cc_value'>"#err#"</span>><br />         </p><br />         </cfif><br />         <cfif isDefined(<span class='cc_value'>"cgi"</span>)><br />         <p><br />            <h1>CGI Details</h1><br />            <cfdump var=<span class='cc_value'>"#cgi#"</span>><br />         </p><br />         </cfif><br />         </cfoutput><br />      </cfsavecontent><br />      <cffile action=<span class='cc_value'>"write"</span> file=<span class='cc_value'>"#debugFile#"</span> output=<span class='cc_value'>"#debugText#"</span> /><br />   </cfif><br /><br /></cfsilent><br />

Postlet - Client side java image uploader with resizing

I found a great utility today to allow your clients to upload images from the browser and re-size them before it gets sent to the server. Just to list a few of the great features:



  1. Skinnable java applet for header color, background etc

  2. Configurable action with response from the server to halt / continue

  3. Threaded! up to 5 upload threads going at once, configurable 1 to 5

  4. Drag-n-drop - drag images to the java applet and they will either queue up or directly start uploading depending on how you have the application configured.

  5. configurable image types you wish to allow uploaded, supports png, gif, and jpg


Check it out at http://postlet.com/.