I am trying to code my own simple AJAX image upload script via jQuery. I have found some plugins but they are way too customized for what's needed, and I cannot get any of them working properly.
I just want to somehow detect when the user drags and drops an image onto the page. From there I'm sure it's not hard to upload that data and move into a /cache/ directory and allow for further options..
but right now I'm totally stuck with the drag/drop functionality. Literally no idea how I should approach this. What kind of event handler is needed? Will I need to custom code my own event handler? Any advice would be more than appreciated
What kind of event handler is needed?
Drag'n'drop requires a HTML5 browser - but that's pretty much all of them now.
I'd recommend not starting from scratch as there's quite a bit of code needed - I quite like this wrapper that implements it as a jQuery plugin.
http://www.github.com/weixiyen/jquery-filedrop
After defining an element in the document with class div, you can initialise it to accept dropped files with:
function fileSetUploadPercent(percent, divID){
    var uploadString = "Uploaded " + percent + " %";
    $('#'.divID).text(uploadString);
}
function fileUploadStarted(index, file, files_count){
    var divID = getDivID(index, file);
    createFileUploadDiv(divID);     //create the div that will hold the upload status
    fileSetUploadPercent(0, divID); //set the upload status to be 0
}
function  fileUploadUpdate(index, file, currentProgress){
    //Logger.log("fileUploadUpdate(index, file, currentProgress)");
    var string = "index = " + index + " Uploading file " + file.fileName + " size is " + file.fileSize + " Progress = " + currentProgress;
    $('#status').text(string);
    var divID = getDivID(index, file);
    fileSetUploadPercent(currentProgress, divID);
}
function fileUploadFinished(index, file, json, timeDiff){
    var divID = getDivID(index, file);
    fileSetUploadPercent(100, divID);
    if(json.status == "OK"){
        createThumbnailDiv(index, file, json.url, json.thumbnailURL);
    }
}
function    fileDocOver(event){
    $('#fileDropTarget').css('border', '2px dashed #000000').text("Drop files here");
}
$(".fileDrop").filedrop({
            fallback_id: 'fallbackFileDrop',
            url: '/api/upload.php',
            //    refresh: 1000,
            paramname: 'fileUpload',
            //    maxfiles: 25,           // Ignored if queuefiles is set > 0
            maxfilesize: 4,         // MB file size limit
            //    queuefiles: 0,          // Max files before queueing (for large volume uploads)
            //    queuewait: 200,         // Queue wait time if full
            //    data: {},
            //    headers: {},
            //    drop: empty,
            //    dragEnter: empty,
            //    dragOver: empty,
            //    dragLeave: empty,
            //    docEnter: empty,
            docOver: fileDocOver,
        //  docLeave: fileDocLeave,
            //  beforeEach: empty,
            //   afterAll: empty,
            //  rename: empty,
            //  error: function(err, file, i) {
            //    alert(err);
            //  },
            uploadStarted: fileUploadStarted,
            uploadFinished: fileUploadFinished,
            progressUpdated: fileUploadUpdate,
            //     speedUpdated
        });
The bit of the web page that accepts uploads has this HTML.
<div class='fileDrop'>
Upload a file by dragging it.
<span id='fileDropTarget'/>
</div>
The file drop works on the outer <div> but it's nice to make a nice big target that says 'DROP HERE' so that users aren't confused about where they need to drop the file.
Probably too late. But you should checkout http://www.dropzonejs.com/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With