HTML 要素にドラッグアンドドロップのサポートを追加するには、上記の回答に次のコードを追加します: https://stackoverflow.com/a/37348103/4685398
ドロップされたファイルの検証を に追加しますuploadFiles()
。dropppedFiles
使用がない場合fileInputs
:
// file upload
$scope.uploadFiles = function(droppedFiles) {
return new Promise(function(resolve, refuse) {
var fileInputs = $('input[type="file"]');
var formData = new FormData();
var atLeastOneFile = false;
// validate if dropzone or file input
if (droppedFiles) {
for (var i = 0; i < droppedFiles.length; i++) {
formData.append('dropzone', droppedFiles[i], droppedFiles[i].name);
atLeastOneFile = true;
};
}
else {
fileInputs.each(function(index, value) {
if (this.files.length !== 0) {
formData.append('form', this.files[0], this.files[0].name);
atLeastOneFile = true;
}
});
}
if (atLeastOneFile) {
$.ajax({
url: '/uploadFile',
type: 'POST',
processData: false, // important
contentType: false, // important
dataType: 'json',
data: formData,
success: function(evt) {
resolve(true);
}
});
}
else {
resolve(true);
}
});
};
drop
イベントを dropzone に追加uploadFiles(e.originalEvent.dataTransfer.files)
し、ドロップされたファイルで呼び出します。
// dropzone for file upload
$("#drop-box").on('drag dragstart dragend dragover dragenter dragleave drop', function(e) {
e.preventDefault();
e.stopPropagation();
})
.on('dragover dragenter', function() {
$(this).addClass('is-dragover');
})
.on('dragleave dragend drop', function() {
$(this).removeClass('is-dragover');
})
.on('drop', function(e) {
$scope.uploadFiles(e.originalEvent.dataTransfer.files);
});