Моя цель - загрузить несколько файлов из интерфейса Vue.js в серверную часть php / Laravel.
Вот где я собираю файлы:
<input id = "cover-file" @change = "onCoverSelected" type = "file" multiple>
Это метод onCoverSelected:
onCoverSelected(e) {
let files = e.target.files;
// let fileArray = Object.values(files);
for (var i = 0; i < files.length; i++) {
console.info(files[1]);
this.covers.push(files[1]);
}
},
Когда я console.info файлы, они появляются как реальные файлы в консоли DevTools. Все идет нормально.
Однако, когда я помещаю файлы в массив, они становятся строками! Не понимаю почему. Мой бэкэнд зависит от получения массива файловых объектов.
Это скриншот из DevTools, где видно, что объект File становится строкой.
Это из моего бэкэнда, где я надеюсь получить массив объектов File, однако я получаю пустой массив, когда я dd переменную covers:
$covers = (array)json_decode($request->input('covers'));
dd($covers);
без использования (array) распечатывает следующее:
"[object File],[object File],[object File]"
Как я могу получить массив объектов File в бэкэнде? Спасибо.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


К сожалению, File - это объект, представляющий двоичную информацию файла. Проблема не в том, чтобы помещать их в массив, проблема в том, когда вы конвертируете его в JSON: он попытается преобразовать объект File в строку. В этом случае он не может представлять двоичный файл в виде строки, поэтому файл просто преобразуется в => [object File].
Ваши 2 варианта:
Отправьте данные POST в многостраничной форме.
Преобразуйте файл в строку base64 или другие подобные методы. (Может значительно повлиять на производительность, кодирование, а затем декодирование на стороне сервера)
См. Другую связанную тему здесь.