html5 uploader + jquery drag & drop: how to store file data with FormData?
- by lauthiamkok
I am making a html5 drag and drop uploader with jquery, below is my code so far, the problem is that I get an empty array without any data. Is this line incorrect to store the file data - fd.append('file', $thisfile);?
$('#div').on(
    'dragover',
    function(e) {
        e.preventDefault();
        e.stopPropagation();
    }
);
$('#div').on(
    'dragenter',
    function(e) {
        e.preventDefault();
        e.stopPropagation();
        }
    );
$('#div').on(
    'drop',
        function(e){
            if(e.originalEvent.dataTransfer){
                if(e.originalEvent.dataTransfer.files.length) {
                    e.preventDefault();
                    e.stopPropagation();
                    // The file list.
                    var fileList = e.originalEvent.dataTransfer.files;
                    //console.log(fileList);
                    // Loop the ajax post.
                    for (var i = 0; i < fileList.length; i++) {
                        var $thisfile = fileList[i];
                        console.log($thisfile);
                        // HTML5 form data object.
                        var fd = new FormData();
                        //console.log(fd);
                        fd.append('file', $thisfile);
                        /*
                        var file = {name: fileList[i].name, type: fileList[i].type, size:fileList[i].size};
                        $.each(file, function(key, value) {
                            fd.append('file['+key+']', value);
                        })
                        */
                        $.ajax({
                           url: "upload.php",
                           type: "POST",
                           data: fd,
                           processData: false,
                           contentType: false,
                           success: function(response) {
                               // .. do something
                           },
                           error: function(jqXHR, textStatus, errorMessage) {
                               console.log(errorMessage); // Optional
                           }
                        });
                    }
                    /*UPLOAD FILES HERE*/
                    upload(e.originalEvent.dataTransfer.files);
            }
        }
    }
);
function upload(files){
    console.log('Upload '+files.length+' File(s).');
};
then if I use another method is that to make the file data into an array inside the jquery code,
var file = {name: fileList[i].name, type: fileList[i].type, size:fileList[i].size};
$.each(file, function(key, value) {
    fd.append('file['+key+']', value);
});
but where is the tmp_name data inside e.originalEvent.dataTransfer.files[i]?
php,
print_r($_POST);
$uploaddir = './uploads/'; 
$file = $uploaddir . basename($_POST['file']['name']); 
if (move_uploaded_file($_POST['file']['tmp_name'], $file)) { 
    echo "success"; 
} else {
    echo "error";
}
as you can see that tmp_name is needed to upload the file via php...
html,
<div id="div">Drop here</div>