Dropzone с использованием div передача файлов (нескольких изображений) на контроллер через ajax не работает

#php #jquery #html #ajax #codeigniter

#php #jquery #HTML #ajax #codeigniter

Вопрос:

Я пытаюсь создать dropzone в div с классом dropzone, я получаю dropone и могу загружать изображения на нем, но не могу передать его контроллеру, но данные не передаются через jquery в cotroller …. удаляю файлы, все остальное работает нормально .. но я не могу получить загруженные файлы, может кто-нибудь, пожалуйста, сказать, в чем проблема, я хотел вставить несколько изображений,

Это div:

  <div class="col-md-12" style="margin-bottom: 48px; bottom: -50px; border-color:white   ">
                <div class="dropzone" id="mydropzone" action="<?php echo URL.'Events/addeventdetails'?>" >
                     <h1 align="center"><i> Drag or Drop Image Here</i></h1>
                 </div>
             </div>
  

Jquery:

 <script type="text/javascript">

Dropzone.autoDiscover = false;
var myDropzone = new Dropzone('div#mydropzone', {
    addRemoveLinks: true,
    autoProcessQueue: false,
    uploadMultiple: true,
    parallelUploads: 100,
    maxFiles: 15,
    paramName: 'file',
    clickable: true,
    url: '<?php echo URL . 'Events/addeventdetails' ?>',
    init: function () {

        var myDropzone = this;
        // Update selector to match your button
        $btn.click(function (e) {
            e.preventDefault();
            if ( $form.valid() ) {
                myDropzone.processQueue();
            }
            return false;
        });

        this.on('sending', function (file, xhr, formData) {
            // Append all form inputs to the formData Dropzone will POST
            var data = $form.serializeArray();
            $.each(data, function (key, el) {
                formData.append(el.name, el.value);
            });
            console.log(formData);

        });
    },
    error: function (file, response){
        if ($.type(response) === "string")
            var message = response; //dropzone sends it's own error messages in string
        else
            var message = response.message;
        file.previewElement.classList.add("dz-error");
        _ref = file.previewElement.querySelectorAll("[data-dz-errormessage]");
        _results = [];
        for (_i = 0, _len = _ref.length; _i < _len; _i  ) {
            node = _ref[_i];
            _results.push(node.textContent = message);
        }
        return _results;
    },
    successmultiple: function (file, response) {
        console.log(file, response);
        $modal.modal("show");
    },
    completemultiple: function (file, response) {
        console.log(file, response, "completemultiple");
        //$modal.modal("show");
    },
    reset: function () {
        console.log("resetFiles");
        this.removeAllFiles(true);
    }
});
</script>
  

Контроллер:

     $uploaddir = './uploads';

$images = $_FILES;


$data = [];

foreach ($images as $key => $image) {
    $name = $image['name'];
    $uploadfile = $uploaddir . basename($name);
    if (move_uploaded_file($image['tmp_name'], $uploadfile)) {
        $data[$key]['success'] = true;
        $data[$key]['src'] = $name;

    } else {
        $data[$key]['success'] = false;
        $data[$key]['src'] = $name;
    }
}  
 $this->Common_model->form_insertpic('images'); 
  

Ответ №1:

Я вижу, что вы дважды объявили var myDropzone. Это может быть проблемой. Проверьте, действительно ли вызов ajax запускается после загрузки изображения. Var_dump($_FILES) в вашем контроллере, чтобы посмотреть, что там.

Я сделал это таким образом. Попробуйте это так:

 let myDropzone= $("#mydropzone");

const myDropzoneImage = {
    paramName: "file", // name used to transfer the file //
    maxFiles: 50,
    maxFilesize: 5,
    resizeWidth: 350,
    resizeHeight: 258,
    thumbnailWidth: 350,
    thumbnailHeight: 258,
    addRemoveLinks: true,
    dictResponseError: "Server not Configured",
    acceptedFiles: ".png,.jpg,.jpeg",
    //previewsContainer: "#your preview container",

    init: function() {
        let self = this;
        let prevImage = "";

        self.options.dictRemoveFile = "Delete";
        //New file added
        self.on("addedfile", function(file) {
            //console.log("new file added ", file);
        });
        // On removing file
        self.on("removedfile", function(file) {
            // put your ajax call for remove
        });

        self.on("success", function(file, responseText) {
            prevFile = responseText.img_id;
        });

        self.on("error", function(file){
            // console.log("File Failed to Upload");
        });

        //Check image width and height
        self.on("thumbnail", function(file) {
            if (file.width > maxImageWidth || file.height > maxImageHeight) {
                file.rejectDimensions()
            }
            else {
                file.acceptDimensions();
            }
        });

    },
    accept: function(file, done) {
        file.acceptDimensions = done;
        file.rejectDimensions = function() { 
            done("Image width or height too big."); };
        }
    }
}

myDropzone.dropzone(myDropzoneImage);
  

И убедитесь, что этот URL action="<?php echo URL.'Events/addeventdetails'?>" правильный!

Комментарии:

1. Нет, в var_dump ($ files) ничего не попадает… Я не могу получить значения туда