Как добавить несколько файлов в formdata в dropzone.js

#javascript #php #angularjs #dropzone

Вопрос:

Мое приложение состоит из страницы, которая содержит необязательный выбор изображения в выпадающей зоне и некоторый текст. Я выяснил, как отправить файл dropzone и текст, но я не знаю, как заставить его отправлять несколько файлов. Мой контроллер AngularJS:

  $(document).ready(function(){
    $("#food-images").dropzone({
        dictDefaultMessage: "Food Images, multiple or single",
        clickable: true,
        url: "#",
        maxFiles: 10,
        maxFilesize: 3,
        addRemoveLinks: true,
        uploadMultiple: true,
        parallelUploads:10,
       init: function(){
           let fd = new FormData();
           var mydropzone = this;
           mydropzone.on("sending",function(file){
               fd.append("image",file); 
           })
            $scope.addItem = ()=>{
                console.log(fd);
                let name = $scope.name;
                let description = $scope.description;
                let cat = $scope.cat;
                let price = $scope.price;
                let postfields = JSON.stringify({"name":name,"description":description,"cat":cat,"price":price});
        
             let file = mydropzone.files;
                fd.append("data",postfields); 
                fd.append("image",file);
                let api = (window.location.origin) "/adddish";
                $http({
                    method:"post",
                    url:api,
                    data:fd,
                    headers: {"Content-Type":undefined}
                }).then((rez)=>{
                    console.log(rez);
                })
            }
       }
    });
})
 

Это правильно отправляет один файл и мой текст, к которым я могу получить доступ с моего PHP-контроллера:

 <?php
class AddDish{
public function __construct()
{
    $this->conn = (new Database)->connect();
    $this->post = $_POST["data"];
    $this->files = @$_FILES;
}
  public function doAddDish(){
    echo json_encode($this->files);
}
}
$api = new AddDish();
$api->doAddDish();
 

Он возвращает только один из файлов, как я могу добавить несколько?

Ответ №1:

Я нашел исправление, для тех, кому это может понадобиться позже, в dropzone есть метод под названием uploadmultiple.

            let fd = new FormData();
           var mydropzone = this;
           mydropzone.on("sendingmultiple",function(file){
           for(var i=0;i<=files.length;i  ){
            fd.append("image[]",file[i])
           }
          // console.log(files);
           })