У меня очень простая система загрузки файлов с использованием PHP и Dropzone. Загрузите файл PHP, как показано ниже
<?php
error_reporting(E_ALL);
// define absolute folder path
$brand = $_POST['brand'];
$reference = $_POST['reference'];
$dest_folder = 'images/'.$brand.'/';
$url = 'https://www.example.com/testupload/';
if (!empty($_FILES)) {
if (!file_exists($dest_folder) && !is_dir($dest_folder)) mkdir($dest_folder);
foreach($_FILES['file']['tmp_name'] as $key => $value) {
$ext = strtolower(pathinfo($_FILES['file']['name'][$key],PATHINFO_EXTENSION));
if (file_exists($dest_folder) && !is_dir($dest_folder)){
continue;
}else{
mkdir($dest_folder);
}
$imgName = $brand."-".$reference.'-picture'.$key.'.'.$ext;
$tempFile = $_FILES['file']['tmp_name'][$key];
$targetFile = $dest_folder.$imgName;
move_uploaded_file($tempFile,$targetFile);
}
$dir = $dest_folder;
$data = scandir($dir);
$arr = [];
foreach($data as $key=>$dataVal)
{
if ($dataVal!='.' && $dataVal!='..'){
$arr[] = $url.$dir.$dataVal;
}
}
$imgstring = implode(",",$arr);
/**
* Response
* return json response to the dropzone
* @var data array
*/
$data = [
"file" =>$brand,
"dropzone" => $_POST["dropzone"],
"img"=>$imgstring
];
file_put_contents('abc.txt',$data);
header('Content-type: application/json');
echo json_encode($data);
exit();
}
и My DropZone js, как показано ниже
// disable autodiscover
Dropzone.autoDiscover = false;
var myDropzone = new Dropzone("#dropzone", {
url: "upload.php",
method: "POST",
paramName: "file",
autoProcessQueue : false,
acceptedFiles: "image/*",
maxFiles: 5,
maxFilesize: 2, // MB
uploadMultiple: true,
parallelUploads: 100, // use it with uploadMultiple
createImageThumbnails: true,
thumbnailWidth: 120,
thumbnailHeight: 120,
addRemoveLinks: true,
timeout: 180000,
dictRemoveFileConfirmation: "Are you Sure?", // ask before removing file
// Language Strings
dictFileTooBig: "File is to big ({{filesize}}mb). Max allowed file size is {{maxFilesize}}mb",
dictInvalidFileType: "Invalid File Type",
dictCancelUpload: "Cancel",
dictRemoveFile: "Remove",
dictMaxFilesExceeded: "Only {{maxFiles}} files are allowed",
dictDefaultMessage: "Drop files here to upload",
});
myDropzone.on("addedfile", function(file) {
console.info(file);
});
myDropzone.on("removedfile", function(file) {
// console.info(file);
});
// Add mmore data to send along with the file as POST data. (optional)
myDropzone.on("sending", function(file, xhr, formData) {
formData.append("dropzone", "1"); // $_POST["dropzone"]
});
myDropzone.on("error", function(file, response) {
console.info(response);
});
/**
* Add existing images to the dropzone
* @var images
*
*/
$("body").on("submit","#dropzone-form",function(e){
e.preventDefault();
var brand = $('body .brand').val();
var reference = $("body .reference").val();
if (brand=='' || reference==''){
alert('Please check your Input');
return false;
}
myDropzone.on("sending", function(file, xhr, formData){
var brand = $('body .brand').val();
var reference = $("body .reference").val();
formData.append("brand", brand);
formData.append("reference", reference);
}),
myDropzone.processQueue();
});
myDropzone.on("success", function(file,response) {
console.info(response.img);
$('#imgResponse').html(response.img);
});
я проверил это
myDropzone.on("success", function(file,response) {
console.info(response.img);
$('#imgResponse').html(response.img);
});
в приведенной выше функции я могу запустить предупреждение, поэтому событие успеха работает, но
console.info(response.img);
не работает. Он работает нормально, но просто ответ не получает должным образом, и поэтому он выдает неопределенное сообщение в консоли. Тот же код работает нормально на одном сервере, а на другом я получаю эту ошибку. Я также проверил, что модуль json включен на сервере и протестирован с использованием примера кода для кодирования и декодирования. Я также проверил, что отображение включено в phpinfo(). Я не понимаю, почему он не работает на этом сервере. Дайте мне знать, если кто-то может помочь мне решить головоломку.
Спасибо!
Убедитесь, что ваш файл получен на обоих серверах. Похоже, на сервере с ошибкой ваш файл не загружается, поэтому вы получаете пустой ответ
@RiyaShah, вам нужно убедиться, что загружаемый вами файл поступает на сервер. У вас есть условие в коде, что если файл не получен, ответа не будет, а на стороне клиента response.img
будет undefined
. Просто print_r $_FILES на сервере, который работает, и на сервере, который не работает.
Файлы загружаются, ошибок нет. Я протестировал его, даже если я жестко запрограммировал img в $ data, он все еще не работает!
В этом случае вам может потребоваться предоставить дополнительную информацию. Можете ли вы поделиться ответом на оба запроса?
Пожалуйста, закомментируйте 2 строки ниже из скрипта PHP.
file_put_contents('abc.txt',$data);
header('Content-type: application/json');
И заменить error_reporting(E_ALL);
на error_reporting(0);
Это отключит предупреждающее сообщение из ответа сервера.
Ага! Это была проблема, она исправлена. Спасибо!
Оба файла или на одном сервере. Я говорю, что весь этот код работает на одном сервере без ошибок, но не работает на другом сервере. Я не отправляю файлы на другой сервер. Спасибо!