Created
October 6, 2012 03:47
-
-
Save philfreo/3843703 to your computer and use it in GitHub Desktop.
HTML Drag and Drop Multiple Upload - http://www.appelsiini.net/2009/10/html5-drag-and-drop-multiple-file-upload
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Cannot use $.bind() since jQuery does not normalize native events. */ | |
$('#dropzone').get(0).addEventListener('drop', upload, false); | |
function upload(event) { | |
var data = event.dataTransfer; | |
var boundary = '------multipartformboundary' + (new Date).getTime(); | |
var dashdash = '--'; | |
var crlf = '\r\n'; | |
/* Build RFC2388 string. */ | |
var builder = ''; | |
builder += dashdash; | |
builder += boundary; | |
builder += crlf; | |
var xhr = new XMLHttpRequest(); | |
/* For each dropped file. */ | |
for (var i = 0; i < data.files.length; i++) { | |
var file = data.files[i]; | |
/* Generate headers. */ | |
builder += 'Content-Disposition: form-data; name="user_file[]"'; | |
if (file.fileName) { | |
builder += '; filename="' + file.fileName + '"'; | |
} | |
builder += crlf; | |
builder += 'Content-Type: application/octet-stream'; | |
builder += crlf; | |
builder += crlf; | |
/* Append binary data. */ | |
builder += file.getAsBinary(); | |
builder += crlf; | |
/* Write boundary. */ | |
builder += dashdash; | |
builder += boundary; | |
builder += crlf; | |
} | |
/* Mark end of the request. */ | |
builder += dashdash; | |
builder += boundary; | |
builder += dashdash; | |
builder += crlf; | |
xhr.open("POST", "upload.php", true); | |
xhr.setRequestHeader('content-type', 'multipart/form-data; boundary=' | |
+ boundary); | |
xhr.sendAsBinary(builder); | |
xhr.onload = function(event) { | |
/* If we got an error display it. */ | |
if (xhr.responseText) { | |
alert(xhr.responseText); | |
} | |
$("#dropzone").load("list.php?random=" + (new Date).getTime()); | |
}; | |
/* Prevent FireFox opening the dragged file. */ | |
event.stopPropagation(); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$error_message[0] = "Unknown problem with upload."; | |
$error_message[1] = "Uploaded file too large (load_max_filesize)."; | |
$error_message[2] = "Uploaded file too large (MAX_FILE_SIZE)."; | |
$error_message[3] = "File was only partially uploaded."; | |
$error_message[4] = "Choose a file to upload."; | |
$upload_dir = './tmp/'; | |
$num_files = count($_FILES['user_file']['name']); | |
for ($i=0; $i < $num_files; $i++) { | |
$upload_file = $upload_dir . basename($_FILES['user_file']['name'][$i]); | |
if (!preg_match("/(gif|jpg|jpeg|png)$/",$_FILES['user_file']['name'][$i])) { | |
print "I asked for an image..."; | |
} else { | |
if (is_uploaded_file($_FILES['user_file']['tmp_name'][$i])) { | |
if (move_uploaded_file($_FILES['user_file']['tmp_name'][$i], | |
$upload_file)) { | |
/* Great success... */ | |
} else { | |
print $error_message[$_FILES['user_file']['error'][$i]]; | |
} | |
} else { | |
print $error_message[$_FILES['user_file']['error'][$i]]; | |
} | |
} | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment