Skip to content

Instantly share code, notes, and snippets.

@philfreo
Created October 6, 2012 03:47
Show Gist options
  • Save philfreo/3843703 to your computer and use it in GitHub Desktop.
Save philfreo/3843703 to your computer and use it in GitHub Desktop.
/* 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();
}
<?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