#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);
})