我正在使用Dropzone JS构建图像上传器,允许您一次上传多个图像:
HTML:
<div class="dropzone" id="mydroppyzone"><div class="dz-message" data-dz-message><span><i class="fas fa-images"></i> Add Photos</span></div></div>
JS:
$("#mydroppyzone").dropzone({
url: "process_edit_event.php",
autoProcessQueue: false,
maxFiles: 4,
maxFilesize: 2,
uploadMultiple: true,
parallelUploads: 100,
acceptedFiles: ".jpeg,.jpg,.png",
init: function () {
var myDropzone = this;
$("#editEventBtn").click(function (e) {
var editEventFormIsValid = $('#editEventFeaturedForm').valid();
if (editEventFormIsValid) {
if (myDropzone.getQueuedFiles().length > 0) {
e.preventDefault();
myDropzone.processQueue();
} else {
}
}
});
myDropzone.on('success', function (file, response) {
console.log(JSON.stringify(file.upload.filename));
var form = document.getElementById('editEventFeaturedForm');
$("#editEventFeaturedForm").append($('<input type="hidden" ' +
'name="theFiles[]" ' +
'value="' + file.upload.filename + '">'));
form.submit();
});
},
sending: function (file, xhr, formData) {
formData.append("name", $('#name').val());
}
});
process_edit_event.php
// Upload the event photos to the server
$ds = DIRECTORY_SEPARATOR;
$storeFolder = 'user_images/events';
if (!empty($_FILES)) {
$tempFile = $_FILES['file']['tmp_name'];
$targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds;
$targetFile = $targetPath. $_FILES['file']['name'];
foreach($_FILES['file']['tmp_name'] as $key => $value) {
$tempFile = $_FILES['file']['tmp_name'][$key];
$targetFile = $targetPath . $_FILES['file']['name'][$key];
move_uploaded_file($tempFile,$targetFile);
}
}
当我在JavaScript端控制台进行所有日志记录时,映像将按应有的方式进行处理,但在PHP端$ _FILES始终为空。
我很困惑,试图弄清楚为什么$ _FILES为空。我在JavaScript中缺少没有传递到PHP的东西吗?感谢您的帮助!
答案 0 :(得分:0)
问题是表单发送了2次,因为在上传文件的时候,upload.php
是通过ajax自动执行的。
你必须取消表单的提交,因为当我们点击它时,它已经是第二次执行了,因此没有找到任何要上传的文件。