function makeCall(file, handlerFile, sendMethod, formData) {
//console.log(instance.files);
$.ajax({
url: handlerFile,
type: sendMethod,
xhr: function() { // Custom XMLHttpRequest
var xhr = $.ajaxSettings.xhr();
if(xhr.upload) { // Check if upload property exists
xhr.upload.addEventListener('progress', progressHandlingFunction.bind(file)); // For handling the progress of the upload
//xhr.upload.addEventListener('loadend', successHandler.bind(xhr));
}
//console.log(xhr);
return xhr;
},
beforeSend: beforeSendHandler.bind(file),
success: completeHandler.bind(file),
//error: errorHandler,
data: formData, // Form data
dataType: 'json',
cache: true,
//async: false,
contentType: false,
processData: false
});
}
$(".afu-input").on('change', function() {
var i = 0;
var length = this.files.length;
var files = this.files;
var calling = setInterval(function() {
var file = files[i];
console.log(file);
uid = generateUniqueId();
file.id = uid;
var formData = null;
formData = new FormData();
formData.append(i, file);
formData.append(i, [uid]);
makeCall(file, handlerFile, sendMethod, formData);
i++;
if (i >= length) {
clearInterval(calling);
}
}, 2000); // Delay is for testing. Normaly there is no delay
}
ファイルを1つずつアップロードしようとしています。しかし、問題は ajax がリクエストを適切に送信することですが、返されるデータは 1 つ (最初) だけです。
私の目標は、input[type=file] の変更時に画像 (および後で他のファイル) をアップロードするスクリプトを作成することです。1回のリクエストで複数のファイルをアップロードしようとしたのですが、進行イベントが1つとして登録されてしまいます。ファイルを断片にスライス (チャンク) して送信することを考えていましたが、このバリアントの方が簡単に思えます (機能させるだけでよいので、改善します)。ありがとう。