Upload File from Vuejs 3 to Laravel 9 API

1 year ago admin Vuejs

Today we are going to see how we can upload a file from Vue js 3 to Laravel 9 API, it seems hard to deal with but as you will see it is easy to do.


Get user data from the Vue js 3 front end

In the front end, we use the form data interface, all we have to do is to append the values and send them to the Laravel API using Axios.

                                                        
                                                                                                                        
<template>
    <div class="row my-3">
        <div class="col-md-8 mx-auto my-5">
            <form @submit.prevent="addArticle">
                <div class="form-group mb-2">
                    <input 
                        type="text" 
                        v-model="data.title"
                        placeholder="Title"
                        class="form-control"
                        :required="true">
                </div>
                <div class="form-group mb-2">
                    <input 
                        type="file" 
                        name="photo" 
                        @change="getImage"
                        :required="true">
                </div>
                <div class="form-group mb-2">
                    <textarea 
                        rows="5" cols="30" 
                        v-model="data.body" 
                        placeholder="Body"
                        class="form-control"
                        :required="true"
                    ></textarea>
                </div>
                <div class="form-group mb-2">
                    <button type="submit" class="btn btn-primary">
                        Submit
                    </button>
                </div>
            </form>
        </div>
    </div>
</template>

<script setup>
    import { reactive } from 'vue';

    const data = reactive({
        title: '',
        body: '',
        image: null,
    });

    const getImage = (event) => {
        data.image = event.target.files[0];
    };

    const addArticle = () => {
        try {
            const formData = new FormData();
            formData.append('image', data.image);
            formData.append('title', data.title);
            formData.append('body', data.body);
            await axios.post(`/api/articles`, formData);
            console.log('Article added')
        } catch (error) {
            console.log(error);
        }
    }
</script>

<style>
</style>

Store data in the database using Laravel 9

Next, we get and store data in the ArticleController.

                                                            
                                                                                                                                
<?php

namespace App\Http\Controllers;

use App\Models\Article;
use Illuminate\Support\Str;
use Illuminate\Http\Request;

class ArticleController extends Controller
{
    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
        $data = $request->all();
        $file = $request->file('image');
        $image_name = time().'_'.'image'.'_'.$file->getClientOriginalName();
        $file->move('uploads/articles', $image_name);
        $data['image'] = 'uploads/articles/'.$image_name;
        $data['slug'] = Str::slug($request->title);
        $article = Article::create($data);
        return response()->json($article);
    }
}

Related Tuorials

How to Get URL Query Params in Vue 3 Composition API

In this lesson, we will see how to get URL query params in Vue 3 composition API, let's assume that...


How to Use Vue js 3 to Generate Random Passwords

In this tutorial, we will see how to use Vue js 3 to generate random passwords, so our application w...


How to Load More Data on a Button Click Using Vue js 3

In today's lesson, we will see how to load more data on a button click using vue js 3, let's assume...


How to Display Images from Laravel Public Folder in a Vue Component

In this lesson, we are going to see how to display images from Laravel public folder in a Vue compon...


Create a Custom 404 Component using Vuejs 3

In today's lesson, we are going to see how to redirect a user to a custom 404 Vue Component if a rou...


How to Add an Auth Middleware with Vue-router

In this lesson we are going to see how to make an auth middleware using vue-router, the middleware w...


Shopping Cart Using Vue js 3 Composition API and Pinia Part 2

In the second part of this project, we will add the home component, and display the products, we wil...


Shopping Cart Using Vue js 3 Composition API and Pinia Part 1

In today's tutorial, we are going to create a shopping cart using Vue js 3 composition API and pinia...


How to Get Query Params in Vue.js 3 Composition API

In this lesson, we are going to see how to get query params using Vue js 3 composition API, let's as...


How to Update an Object's value in Array in Vue js 3

Let's assume that we are working in a shopping cart with Vue js 3, the user adds items to the cart,...