Laravelとvueを利用するときに、よくvue側でファイルのアップロードをコントロールすることがあります。

たとえ、

vueのtemplateの中に、下記のfile input要素がある。

<input id="logo_image" type="file"
       lang="ja"
       class="custom-file-inout form-control"
       v-bind:class="{ 'is-invalid': has_error }"
       name="logo_image"
       @change="onFileChange"
>

method onFileChangeの中に、

onFileChange(e) {
    const file = e.target.files[0];
    if (file) {
        this.validate(file);
    }
},

e.target.files[0]のようにアップロードしたファイルを取得することができますが、取得したファイルはどうやって、axiosを利用して、Laravelのバックエンドに送信することは問題になります。

 

下記のstackflowの回答を参照したら、わかると思います。

https://stackoverflow.com/questions/42907747/how-to-send-a-file-via-axios-to-laravel

methods: {
  'successUpload': function (file) {

    let data = new FormData();
    data.append('file', document.getElementById('file').files[0]);

    axios.post('/Upload/File',data).then(function (response) {
        console.log(response.data);
    });
  }
}

FormDataを作成し、取得したファイルをformdataの一部に変更して、post/getでcontrollerに送信すれば、controller側で通常のファイルとして扱うことができます。

laravelのファイル操作は以下のリンクを参照してください。

https://laravel.com/docs/6.0/filesystem#file-uploads