Отправка изображения в laravel с помощью Axios, передающего [объектный файл] в виде строки - PullRequest
0 голосов
/ 17 июня 2019

У меня есть приложение реагирования, которое является интерфейсом для приложения Laravel.Я использую простой загрузчик изображений, который возвращает загруженный файл на маршрут поста.В контроллере для почтового маршрута запрос поступает в виде строки, а не фактического объекта.см. мой код.

onUpload = (picture) => {
    this.setState({
        pictures: this.state.pictures.concat(picture),
    });

    var curr = this

    const formData = new FormData();
    formData.append('file',picture)
         console.log(picture[0])

        axios
        .post('/upload-subitem-image', formData, fileHeaders)
        .then(function (response) {

            const data = response.data

                    console.log(data)

        })
        .catch(error => {
            console.log(error);
        })
}

Когда я утешаю графический объект, я получаю

File {name: "test.png", lastModified: 1553443959805, lastModifiedDate: Sun Mar 24 2019 12:12:39 GMT-0400 (Eastern Daylight Time), webkitRelativePath: "", size: 11695, …}

Но после передачи его в laravel, чтобы попытаться получить файл, он возвращает строку, когда я пытаюсьсделать это.

 $data = $request->File();

и выглядит как

{file:{"[object file]"}

Заголовки выглядят так:

const fileHeaders = {
'X-CSRF-TOKEN' : document.querySelector('meta[name="csrf-token"]').getAttribute('content'),
'content-type': 'multipart/form-data',
'Accept': 'application/json',
  }  

Ответы [ 3 ]

2 голосов
/ 17 июня 2019

Судя по окружающему коду, похоже, что вы append - массив picture.

API для FormData ожидает File или Blob для загрузки файла, поэтому для массива он просто превращает его в строку.Поскольку в вашем массиве есть только один элемент, он становится [object file].

Попробуйте выполнить picture[0] в append (и убедитесь, что выполняете правильные проверки границ и т. Д.)

Ссылка:https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects#Sending_files_using_a_FormData_object

0 голосов
/ 17 июня 2019

Закончено добавление некоторых вещей в контроллер в php.

$data = $request->all();
$file = $data['file'];
0 голосов
/ 17 июня 2019

Вы можете сделать JSON.stringify(formData), когда отправляете свой запрос в javascript, и использовать json_decode(), когда используете данные в Laravel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...