vue.jsからlaravelコントローラー側にfileデータを渡したいと思っています。(複数枚)
axiosを使わずに実装する形で進めています。input要素にname属性でvalueをバインドすればblade側で送信された時に取得出来るのでは?と考えました。データは飛んでいるみたいですが、中身が[object File]になってしまいます。
解決したいこと: axiosを使わずに写真のfileデータをlaravelに送りたいです。
現状: データはコントローラーに送られますが、中身が[object File]になってしまいます。
怪しいと思うところ: this.images配列がObserverになってしまっているのが気になります。
component
1<input type="hidden" name="images" :value="images"> 2 data() { 3 return { 4 images: [] 5 } 6 }, 7..省略 8 createImage(file) { 9 const reader = new FileReader(); 10 reader.onload = (e) => { 11 file.thumbnail = e.target.result 12 this.images.push(file) 13 } 14 // console.log(this.images) 15 reader.readAsDataURL(file) 16 }
blade
1<form method="POST" action="{{ route('items.store') }}" enctype="multipart/form-data"> 2 @csrf 3 <image-create></image-create> 4 <button type="submit" class="btn btn-primary"> 5 {{ __('投稿する') }} 6 </button> 7</form>
controller
1 public function store(Request $request) 2 { 3 dd($request); 4 }
dd($request)の結果
console.logの表示内容
試したこと
https://qiita.com/Ancient_Scapes/items/ecd293a7444283cab706
上記を参考に新しい配列を作り直して送ろうとしましたが、this.imagesがObserverになってしまっているので、最初の一枚目がカウントされずでした。
dataにtest配列を設置 Array.prototype.forEach.call(Object(this.images), value => { this.test.push(value) })
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify
この辺りも確認しましたが、今は送信する場合の処理なのであまり関係ないのでは、と判断しました。
fileデータをコントローラーにうまく飛ばせずに作業が止まってしまいました。axiosで実装していた時はFormDataなどを使っていたのですが、今回はaxiosを使っていないのでその違いに対応できていません。
お分りなる方、参考になるサイトなどありましたら是非教えていただきたいです。
よろしくお願い致します。
laravel 7.x
vue.js 2.6.11
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/16 02:16 編集
2020/09/16 02:16
2020/09/16 04:21
2020/09/16 22:08