15. Uploading multiple files
public function process($form, $values) {
/** @var FileUpload[] $files */
$files = $values->files;
}
16.
17.
18.
19.
20.
21.
22. Asynchronous upload
var data = new FormData(form);
var xhr = new XMLHttpRequest;
xhr.open('POST', form.action);
xhr.onreadystatechange = function (e) {
if (xhr.readyState === 4) { // DONE
if (xhr.status === 200) {} else {}
}
};
23. Progress tracking
xhr.upload.onprogress = function (e) {
if (e.lengthComputable) {
var percentage = e.loaded / e.total;
// display somewhere
}
};
xhr.send(data);
26. Drag'n'drop
%containsFiles%:
// FF, IE - types is 'DOMStringList'
e.dataTransfer.types.contains('Files');
// WebKit - types is Array
e.dataTransfer.types.indexOf('Files') > -1;
27. Drag'n'drop
$('#dropzone').on('drop', function (e) {
e.preventDefault();
var data = new FormData();
var files = e.dataTransfer.files;
for (var i = 0; i < files.length; i++) {
data.append(files[i].name,
files[i]);
}
});