FormData публикует только один файл изображения - PullRequest
0 голосов
/ 11 октября 2018

Я хочу опубликовать несколько файлов изображений на сервере.Я использовал formData (formDta.append ()), который получает только одно изображение .. он не принимает несколько изображений

 **#contained-button-file** is the input file ID

uploadCategoryImages = () => {
    let formData = new FormData()
    let imagefile = document.querySelector('#contained-button-file')
    formData.append('image', imagefile.files[0])
    api.post('/api/v1/addimage/category/3', formData)
       .then(function (response) {
           console.log(response)
       })
       .catch(function (error) {
           alert(error)
       })   
}

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Да FormData полю можно назначить один файл за раз, но вы можете добавить несколько файлов в FormData, как показано ниже

uploadCategoryImages = () => {
 let formData = new FormData();
 let imagefile = document.querySelector('#contained-button-file');

 //loop through file elements and append file in formdata
 for(var i = 0; i <imagefile.files.length; i++){
    //you can name it anything here it will be image-0, image-1 like so
    formData.append('image-'+ i, imagefile.files[i]);
 }

 api.post('/api/azz/a/ss/ss/ss/s/', formData)
 .then(function (response) 
  {
  console.log(response)
  alert("Images have been uploaded Succesfully!!!");
  })
  .catch(function (error) {
  alert(error)
  })

}
0 голосов
/ 11 октября 2018

Ваша текущая реализация пытается добавить только первый элемент (0) из imagefile.files.

Array.prototype.forEach () можно использовать для добавления каждого элемента.

FormData.append () также ожидает имя в качестве первого параметра, за которым следует значение и, наконец, необязательное имя файла.

Ниже приведен практический пример.

[...imagefile.files].forEach(file => formData.append('image[]', file))

В целом, ваша функция uploadCategoryImages может быть уменьшена до следующего:

uploadCategoryImages = () => {
  const data = new FormData()
  const images = document.getElementById('contained-button-file').files
  [...images].forEach(image => data.append('image[]', image))
  api.post('/api/v1/addimage/category/3', data)
    .then(console.log)
    .catch(alert)
}
...