【发布时间】:2019-07-28 13:30:57
【问题描述】:
我正在使用 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 的内容?感谢您的帮助!
【问题讨论】:
-
您的
upload_max_filesize和post_max_size设置为什么?您可以在服务器上检查您的 ini 配置或快速ini_get('upload_max_filesize') -
@jfadich 64M 它说.. 我正在测试的文件也非常小。该图像看起来在 Dropbox 端处理得很好,但它似乎永远不会进入 $_FILES。这段代码最初对我有用..然后突然停止
-
您的 javascript 代码将文件添加到名为
theFiles的输入中,但您的 PHP 代码正在尝试读取$_FILES['file']。将输入的名称更改为file或检查$_FILES['theFiles'] -
@rickdenhaan 谢谢我尝试了这两种方法,但都没有奏效。无论如何,$FILES 不会被读取为非空吗?
-
嗯,应该的。假设您的表单将其
enctype设置为multipart/form-data。是吗?
标签: javascript php dropzone.js