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