Будет ли typeof до и после преобразования одинаковым?
Поскольку "file" не является типом данных JavaScript.Все, что не является примитивом, является объектом.
console.log(typeof 1);
console.log(typeof "1");
console.log(typeof null);
console.log(typeof undefined);
console.log(typeof [1,2,3]);
console.log(typeof {hello: "world"});
console.log(typeof new Date());
console.log(typeof document.body);
console.log(typeof window);
2) Как я могу отправить массивы файловых объектов в бэкэнд?Есть ли другое решение?
- Понимание того, как данные форматируются при отправке их по HTTP
- Понимание ограничений jQuery
Youне могу отправить массив.Вы можете отправить только некоторый текст, который серверный код может собрать в массив.
Для обоих стандартных кодировок, поддерживаемых формами , PHP заполнит $_POST
данными в них.
Если имя поля в этих данных заканчивается на []
, PHP поместит массив в $_POST
.
Если вы передадите массив в jQuery ajax:
data: { someValue: [1, 2, 3] }
Тогда jQuery закодирует его как:
someValue[]=1&someValue[]=2&someValue[]=3
… поэтому PHP сгенерирует массив.
Однако значения должны быть такими, которые понимает jQuery.Он не может обрабатывать FormData
объекты.
Если вы хотите отправить объект FormData
(что необходимо сделать для отправки файлов), вам нужно отправить его вместо объекта:
jQuery.ajax({
url: "/foo",
data: a_form_data_object,
processData: false,
contentType: false,
});
Вам нужно processData
, чтобы он не пытался преобразовать объект FormData (т. е. он позволит XMLHttpRequest делать это).Вам нужно contentType
, чтобы остановить его, переопределяя один XMLHttpRequest, сгенерированный из объекта FormData.
Итак, чтобы отправить массив, мы вернемся к правилам, которые я описал выше.Вы сказали:
fileBag.append(file_name, file);
Но чтобы получить массив, вам нужно имя, заканчивающееся на []
.
fileBag.append("myname[]", file);
Наконец, не видно вваш вопрос, но, глядя на ваш кодекс.Это даст вам набор файлов:
document.getElementById(fileUploadButtonId).files;
Поскольку они являются файлами, использование кода для их преобразования в файлов не даетСмысл.
Вы можете упростить свой код:
var fileBag = new FormData();
var files = document.getElementById(fileUploadButtonId).files;
var arrayOfAllUploadedFiles = Array.from(files);
fileArray.forEach(file => fileBag.append("myname[]", file);
jQuery.ajax({
url: "/foo",
data: fileBag,
processData: false,
contentType: false,
});