Почему не работает Array.from(value) при переводе formData в массив?
https://codepen.io/accountnujen/pen/...N?editors=1111
document.querySelector("form").addEventListener("submit", function (event) { event.preventDefault(); let datar = {}; const formData = new FormData(this); for(let [key, value] of formData.entries()) { console.log([key, value]); if (key === 'inputFile') { let arrpair = Array.from(value); console.log(arrpair); datar[key] = arrpair.map(file => ({ name: file.name, type: file.type, size: file.size })); } else { datar[key] = value; } } console.log(datar); }); Почему в конечном итоге arrpair пустой, если value содержит в себе file? |
Потому, что value не итерируемый и у него нет свойства length.
https://developer.mozilla.org/ru/doc...%D0%B8% 20Set). Почему не так? if (key === 'inputFile') { datar[key] = {name: value.name, type: value.type, size: value:size}; } else { Или все вместе let datar = Object.fromEntries(formData.entries()); Только зачем бы все это? |
voraa, fromEntries как раз тут не катит, т.к. multipart/form-data создаёт по отдельной записи с одинаковым именем на каждый файл.
Тут нужно юзать formData.getAll() или собирать массив руками. |
Цитата:
|
voraa, так в этом и вопрос автора.)
|
Цитата:
Можно, если полей с одним именем несколько (не только для file) делать массив значений что то типа такого document.querySelector("form").addEventListener("submit", function (event) { event.preventDefault(); let datar = {}; const formData = new FormData(this); for(let [key, value] of formData.entries()) { console.log([key, value]); if (key === 'inputFile') { value = {name: value.name, type: value.type, size: value:size}; } if (datar[key] === undefined) { datar[key] = value; } else { if (!Array.isArray(datar[key])) datar[key] = [datar[key]] datar[key].push(value); } } console.log(datar); }); |
Часовой пояс GMT +3, время: 02:59. |