Laravel5で画像アップロードの実装を行っております。アップロードの際はVue.js + AxiosでAjax送信を行っております。
画像をアップロードするときに画像に対するRequiedバリデーションを設定していないにもかかわらずバリデーションが反応してしまうという現象があって、どん詰まりました。
PHP側で画像ファイルを受け取った際に、空のデータではなくゴミのようなデータが送信されてしまっているのかな。。。と思いいろいろデバックしてみましたが、$request->file('file0')
自体は何も入っていないのですが、Validationは反応してしまっているのです。
こちら同じ現象に出くわした方いましたら、なにかしらご教授お願いしたいです。
fileバリデーションが反応しているので、何かしら壊れたデータ的なものが送信されてしまっていると思うのですが。。。Vue側でのデータはfile0: null,
で初期化しています。
html
1<div id="test"> 2 <input type=text v-model="name"> 3 <p>@{{error_message_name}}</p> 4 <input @change="selected_file0" type="file" name="file0"> 5 <p>@{{error_message_file0}}</p> 6 <input @change="selected_file1" type="file" name="file1"> 7 <p>@{{error_message_file1}}</p> 8 <button type="button" @click="post($event)">Submit</button> 9 </div> 10 11 <script> 12 var app = new Vue({ 13 el: '#test', 14 data: { 15 name: "default name", 16 error_message_name: "", 17 file0: null, 18 file1: null, 19 error_message_file0: "", 20 error_message_file1: "", 21 }, 22 methods: { 23 selected_file0: function(event){ 24 event.preventDefault(); 25 // console.log(event.target.files); 26 let files = event.target.files; 27 this.file0 = files[0]; 28 console.log(this.file0); 29 }, 30 selected_file1: function(event){ 31 event.preventDefault(); 32 // console.log(event.target.files); 33 let files = event.target.files; 34 this.file1 = files[0]; 35 console.log(this.file1); 36 }, 37 post: function(){ 38 console.log("submit"); 39 40 let params = new FormData(); 41 params.append('name', this.name); 42 params.append('file0', this.file0); 43 params.append('file1', this.file1); 44 params.append('_token', '{{csrf_token()}}'); 45 46 var config = { 47 headers: { 48 'content-type': 'multipart/form-data' 49 } 50 }; 51 axios.post( 52 '/v2/form/tutorial/store', 53 params, 54 config 55 ).then(response => { 56 if (response.status === 200) { 57 console.log(response); 58 } 59 }).catch(e => { 60 console.log(e.response.data.errors.file0); 61 console.log(e.response.data.errors.file1); 62 console.log(e.response.data.errors.name); 63 this.error_message_name = e.response.data.errors.name; 64 this.error_message_file0 = e.response.data.errors.file0; 65 this.error_message_file1 = e.response.data.errors.file1; 66 }); 67 } 68 } 69 }); 70 </script>
php
1public function tutorial_store(Request $request) { 2 3 $this->validate($request, [ 4 'name' => 'required', 5 'file0' => 'file|image|mimes:jpeg,gif,png|dimensions:min_width=100,min_height=100,max_width=3600,max_height=3600', 6 'file1' => 'file|image|mimes:jpeg,gif,png|dimensions:min_width=100,min_height=100,max_width=3600,max_height=3600', 7 ]); 8 9 // なんか保存の処理 10 $path = $request->file('file0')->store('public/pics'); 11 $path = $request->file('file1')->store('public/pics'); 12 13 return view("develop.form_tutorial_store"); 14}
回答1件
あなたの回答
tips
プレビュー