Come forse ho gia' detto in un altro post, sto implementando un plugin per jQuery che consente l'upload di file con drag&drop. I browser webkit supportano l'uso dell'oggetto FormData (che sara' supportato anche in Firefox dalla versione 4).
Questo e' il codice della funzione che gestisce l'upload
Codice PHP:
var upload_wk = function (event, target, options) {
show_progress (target);
var data = event.dataTransfer;
var files = data.files;
var fdata = new FormData();
for (var i = 0; i < files.length; i++) {
var file = files[i];
fdata.append ('file' + i, file);
}
var xhr = new XMLHttpRequest();
xhr.open("POST", options.url, true);
xhr.upload.addEventListener("progress", function (event) {
if (event.lengthComputable) {
var percentComplete = event.loaded / event.total;
$("#meter").text (Math.round(percentComplete * 100) + '%');
}
else {
// Unable to compute progress information since the total size is unknown
}
}, false);
xhr.addEventListener("load", function (event) {$("#upload-meter").fadeTo ('slow', 0);$("#upload-meter").remove();options.complete (event)}, false);
xhr.addEventListener("error", function (event) {$("#upload-meter").fadeTo ('slow', 0);$("#upload-meter").remove();options.failed (event)}, false);
var optionalHeaders = options.headers;
for (var i = 0; i < optionalHeaders.length; i ++) {
xhr.setRequestHeader(optionalHeaders[i].header, optionalHeaders[i].value);
}
xhr.send (fdata);
};
Il problema sta nel fatto che la callback del progress non viene chiamata. Pero' se prima di fare la send setto manualmente l'header relativo al content type allora si' che viene chiamata. Ma il content type e' bene che sia settato automaticamente, perche' io non posso sapere a priori quali siano i boundaries tra i file che l'oggetto FormData usa.
Qualcuno di voi si e' gia' scontrato con questo problema?