Skip to main content
Category:

Today, we will learn file upload with laravel and vue js. we will create example of laravel vue axios file upload. we can easily fire post request using axios and pass file object as parameter, so we can store file to server using laravel 5, laravel 6, laravel 7 and laravel 8.

Create Route

In this step, we will create one post route and write file upload code. So, let's add new route on that file.

routes/web.php

Route::post('formSubmit','FileController@formSubmit');

 

Create FileController

in this step, now we have create FileController with formSubmit methods, in this method we will write code of store file on server. So let's create controller:

app/Http/Controllers/FileController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class FileController extends Controller

{

/**

* success response method.

*

* @return \Illuminate\Http\Response

*/

public function formSubmit(Request $request)

{

$fileName = time().'.'.$request->file->getClientOriginalExtension();

$request->file->move(public_path('upload'), $fileName);

return response()->json(['status'=>201]);

}

}

 

 

Write Component in vue.js

resources/assets/js/components/ExampleComponent.vue

<template>

<div class="container">

<div class="row justify-content-center">

<div class="col-md-8">

<div class="card">

<div class="card-header">Laravel Vue JS File Upload </div>

<div class="card-body">

<div v-if="success != ''" class="alert alert-success" role="alert">

{{success}}

</div>

<form @submit="formSubmit" enctype="multipart/form-data">

<strong>Name:</strong>

<input type="text" class="form-control" v-model="name">

<strong>File:</strong>

<input type="file" class="form-control" v-on:change="onFileChange">

<button class="btn btn-success">Submit</button>

</form>

</div>

</div>

</div>

</div>

</div>

</template>


<script>

export default {

mounted() {

console.log('Component mounted.')

},

data() {

return {

name: '',

file: '',

success: ''

};

},

methods: {

onFileChange(e){

this.file = e.target.files[0];

},

formSubmit(e) {

e.preventDefault();

let currentObj = this;


const config = {

headers: { 'content-type': 'multipart/form-data' }

}


let formData = new FormData();

formData.append('file', this.file);


axios.post('/formSubmit', formData, config)

.then(function (response) {

currentObj.success = response.data.success;

})

.catch(function (error) {

currentObj.output = error;

});

}

}

}

</script>

 

 

 

Step 6: Update welcome.blade.php

At last step, we will update our welcome.blade.php file. in this file we will use app.js file and use it, so let's update.

resources/views/welcome.blade.php

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<meta name="csrf-token" content="{{ csrf_token() }}">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Laravel Vue JS File Upload Example - ItSolutionStuff.com</title>

<link href="{{asset('css/app.css')}}" rel="stylesheet" type="text/css">

</head>

<body>

<div id="app">

<example-component></example-component>

</div>

<script src="{{asset('js/app.js')}}" ></script>

</body>

</html>

 

Now you have to run below command for update app.js file:

npm run dev

Make sure you created "upload" folder on your public directory.

 

Riadh Rahmi

Senior Web Developer PHP/Drupal & Laravel

I am a senior web developer, I have experience in planning and developing large scale dynamic web solutions especially in Drupal & Laravel.

Web Posts

Search

Page Facebook