Почему не работает 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, время: 00:33. |