Laravel загрузка файла не работает: вызов функции-члена getClientOriginalName () для строки - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь загрузить файл из поля ввода. У меня есть следующие поля:

<tr>
 <td>
  <input id="item" class="form-control-file my-2 w-100" type="file">
 </td>
 <td>
  <input id="remark" class="form-control my-2 w-100" type="text">
 </td>
</tr>

Тогда мой топор ios post:

self.$http.post('http://127.0.0.1:8000/api/item/new', {
 batchcode: document.getElementById("batchcode_form").value, // is somewhere else in the code, works fine.
 product_code: document.getElementById("item").files[0].name,
 remark: document.getElementById("item"),
 input_type: 'item'
}).then(function (response) {
 if (response.data.status === 'success') {
 // success
} else {
 // failed
}
});

В заголовках отображаются следующие данные:

batchcode "batchcode, который я заполнил"

input_type: "file"

product_code: "filenamewithoutpath.png"

примечание: "примечание, которое я заполнил"

Теперь у меня есть следующий код в моем itemscontroller:

    public function store(Request $request)
    {
        if ($request->product_code != "" && $request->remark != "") {
            // create item
            $item = new Item;
            $item->batchcode = $request->batchcode;
            $item->remarks = $request->remark;
            if ($request->input_type === "file") {
                // upload file
                $file = $request->product_code;
                $item->product_code = $file->getClientOriginalName();
                $new_name = time().$file->getClientOriginalName();
                $path = public_path() . '/uploads/';
                $file->move($path, $new_name);
                $item->product_code = '/uploads/' . $new_name;
            } else {
            $item->product_code = $request->product_code;
            }
            $item->save();
            return response()->json([
                'status' => 'success',
                'data' => $item
            ]);
        } else {
            return response()->json([
                'status' => 'error',
                'data' => 'Not all data was given.'
            ]);
        }
    }

При выполнении этого я получаю следующую ошибку: Call to a member function getClientOriginalName() on string

Я получаю правильное имя файла, но загрузка часть не работает. Я не могу понять или найти что-нибудь в Google, почему это не работает.

1 Ответ

0 голосов
/ 25 апреля 2020

Вы можете использовать FormData . Пример:

let payload = new FormData()

И затем добавьте поля в форму, которую вы хотите отправить:

payload.set('input_type', 'item')

Если вы загружаете изображения или файлы, вы можете использовать .append

payload.append('remark', imageFile); 

И тогда вы можете использовать метод топора ios post (Вы можете изменить его соответствующим образом)

self.$http.post('http://127.0.0.1:8000/api/item/new', payload, {
     headers: {'Content-Type': 'multipart/form-data' }
})
.then(function (response) {
    //handle success
    console.log(response);
})
.catch(function (response) {
    //handle error
    console.log(response);
});
...