gadgetui.input.FileUploader example - Part III - database and CFML engine
In parts I and II of my FileUploader example code, I showed you the client-side and server-side code for the FileUploader component and some example code for a CFML-based server-component to handle the uploaded data. What we haven't covered yet is the database component. There isn't very much to it - just a single table - and it doesn't really even need to be in a database, I just built it that way to enable persistence in broken uploads in case your browse crashes during the upload. I haven't actually finished that piece of development yet, but the underpinnings are there to make it work.
So, getting right to the point, here is a SQL create statement for a table in MySQL/MariaDB to handle the file upload metadata. Note that this table is only used during the upload process to track the individual fileparts before they are stitched back together into the resulting uploaded file.
CREATE TABLE `filepart` ( `fileId` varchar(50) NOT NULL, `filepath` varchar(500) NOT NULL, `filepart` int(11) NOT NULL, `parts` int(11) NOT NULL, PRIMARY KEY (`fileId`,`filepart`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
I'm using UTF-8 and InnoDB, as seen here. You can use whatever SQL back-end you choose. You could even use a NoSQL back-end, but you would need to write your own server-side code for it. I have written a set of server-side components (in CFML) to store uploaded files (not the fileparts, the actual files) and file metadata in MongoDB. That code is available for licensing for anyone who is interested in a more scalable solution than uploading to the file system.
To run the FileUploader example, you will need to create this table in a database and add a datasource to it using the Admin application for your CFML engine. If you are new to CFML engines, the easiest way to get the example running is to install CommandBox and run it that way. Some useful links to get you started: