質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2243閲覧

vueからlaravelに写真のデータを送ると中身が[object File]になってしまいます。

tenlife

総合スコア70

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/09/16 01:27

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

結論

その挙動は正常のはずです。

pngなら

php

1 2 public function store(Request $request) 3 { 4 return "<img src=\"data:image/png;base64,\"".base64_encode($request['images'][0])."\" />"; 5 } 6

投稿2020/09/16 02:14

編集2020/09/16 02:29
kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kyoya0819

2020/09/16 02:16 編集

(このコードで確認できるはず。 質問者さんの挙動は正常なはず。
kyoya0819

2020/09/16 02:16

画像をbase64エンコードして、img要素で表示するコードです。
tenlife

2020/09/16 04:21

回答ありがとうございます! 回答を元に以下を作成しました。 $image_list = explode(',', $request->images); return "<img src=\"data:image/png;base64,\"".base64_encode($image_list[0])."\" />"; 上記を実装したところ写真は表示されず空の時の写真マークとsrcには作成された文字列がありました。(これで正しい挙動でしょうか?) 下記のような形でbase64_encodeを使用して保存するという作業をしてみましたが、file_get_contentsでfailed to open stream: No such file or directoryのエラーが出てしまいます。 https://qiita.com/RitaChan/items/d59001430f50789c570f base64_encodeを使用して画像を保存する参考になる考え方、サイトなど教えていただきたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問