Отправка файла через axios в laravel

Я использую сборщик файлов Quasar для перехвата файла от пользователя для отправки в Laravel контроллер с помощью Axios. Когда я отправляю свои данные в Laravel контроллер, я получаю пустой объект. Пожалуйста, помогите мне решить эту проблему!

Html :

<q-file
   v-model = "file"
   accept = ".jpg, .png, .jpeg"
   label = "Select file"
/>

Js :

let config;
export default {
data() {
 return {
  file: null
},
methods: {
  send() {
    let data = new FormData();
    data.append('file', this.file);

    Http.post('api/create', data, config)
      .then(response => {
        console.info(response )
      })
      .catch(error => {
        console.info(error)
      });
   }
},
created() {
  config = {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  };
}

результат console.info(this.file,config);:

File {name: "WhatsApp Image 2020-12-07 at 10.25.00 PM (2).jpeg", lastModified: 1607540162000, lastModifiedDate: Wed Dec 09 2020 22:26:02 GMT+0330 (Iran Standard Time), webkitRelativePath: "", size: 73419, …}
lastModified: 1607540162000
lastModifiedDate: Wed Dec 09 2020 22:26:02 GMT+0330 (Iran Standard Time) {}
name: "WhatsApp Image 2020-12-07 at 10.25.00 PM (2).jpeg"
size: 73419
type: "image/jpeg"
webkitRelativePath: ""
headers:
Content-Type: "multipart/form-data"

все в порядке, пожалуйста, в дампе вашего контроллера (request () -> all ()); и скинь скрин если можно

anas omush 10.12.2020 19:24

@anasomush В файле контроллера: {}

amin hd 10.12.2020 21:07

@anasomush В заголовке у меня есть: файл: (двоичный)

amin hd 10.12.2020 21:09

ваша проблема в контроллере, в интерфейсе все в порядке

anas omush 10.12.2020 21:56
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
4
556
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ты очень близко. При работе с полями ввода файла вы не используете v-модель, поскольку файлы обрабатываются немного иначе, чем обычные данные.

Вместо этого прослушайте изменения на входе файла, а затем создайте составные данные формы и отправьте их в laravel.

Добавьте событие изменения к вашему вводу, которое запускает ваш метод отправки. Значение $event будет содержать все, что нам нужно. ($event — это специальная переменная для сбора данных о событиях из полей).

<q-file
   accept = ".jpg, .png, .jpeg"
   label = "Select file"
   @change = "send($event)"
/>

Затем немного скорректируйте метод отправки

export default {
  methods: {
    send(event) {
      // Don't go any further if no file was selected
      if (!event.target.files.length) return

      const data = new FormData();
      data.append('file', event.target.files[0]);

      Http.post('api/create', data, {
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      })
        .then(response => {
          console.info(response )
        })
        .catch(error => {
          console.info(error)
        });
    }
  }
}

Ваш загруженный файл будет доступен в Laravel через $request->file('file');

Спасибо за ваш ответ, у меня есть другие входы и кнопка, которая отправляет форму в бэкэнд. Как я могу использовать его в своем коде?

amin hd 10.12.2020 16:14

Когда я пытаюсь бежать: console.info(event.target.files[0]) У меня ничего нет :/

amin hd 10.12.2020 16:19

Вы можете добавить другие данные, добавив дополнительные добавления. например: data.append('somethingelse', this.somethingElse);

Shealan 11.12.2020 03:10
Ответ принят как подходящий

Дело было в контроллере laravel, который не показывал мне полученные файлы в return $request->all(), return $request()->files() или return $request->input('file).
Я не знаю, это было о api или laravel passport, но я сохраняю элемент в каталоге проекта и готово!

Другие вопросы по теме