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

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

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

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

0回答

2327閲覧

laravelでbase64エンコードからファイル変換して保存した画像が表示されない。拡張子は.txtになっている。

tenlife

総合スコア70

Laravel

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2020/09/16 22:49

base64からエンコードされた画像データをファイルに変換してデータベースに保存しています。保存までは正しく出来、シンボリックも通したのですが、画像が表示されません。

解決したいこと: 画像を表示させたいです。保存されているデータは"storage/wTPZfGOID・・・・.txt"のような形です。

現状: 画像が表示されず、エラーも出ません。

気になる所: 拡張子が.txtになっている点です。.pngとか.jpegなのではと予想しています。

blade

1 @foreach($item->images as $image) 2 <img src="{{$image->image_path}}" class="card-img-top"> 3 @endforeach

controller

1 if($request->has('images')) { 2 $images = []; 3 $image_list = explode(',', $request->images); 4 foreach($image_list as $image) { 5 $img = new Image(); 6 7 $tmpFilePath = sys_get_temp_dir() . '/' . Str::uuid()->toString(); 8 file_put_contents($tmpFilePath, $image); 9 $tmpFile = new File($tmpFilePath); 10 $file = new UploadedFile( 11 $tmpFile->getPathname(), 12 $tmpFile->getFilename(), 13 $tmpFile->getMimeType(), 14 0, 15 true 16 ); 17 $path = $file->store('public'); 18 $read_temp_path = str_replace('public/', 'storage/', $path); 19 $img->image_path = $read_temp_path; 20 array_push($images, $img); 21 } 22 23 $item->images()->saveMany($images); 24 }

イメージ説明

確認したこと
シンボリックリンクの確認、php artisan config:cacheの実行
storage/app/publicとpublic/storageに同じ値が入っている事を確認。

asset()を加える => 変わらず <img src="asset({{$image->image_path}})" class="card-img-top">

参考記事1
参考記事2 こちらの回答2の説明だと.txtでも問題なさそうなイメージに見えます。。

拡張子が.txtの状態でも画像を保存することは可能なのでしょうか?
拡張子を変更する必要がある場合は参考になる記事、書き方などを教えていただきたいです。

お分かりになる方いましたらご教授いただきたいです。
よろしくお願い致します。

laravel 7.x

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

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

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

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

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

coco_bauer

2020/09/16 23:14

エンコードされた画像データをファイルに変換して、元の画像のフォーマット(JPEG,GIF等)に合わせた拡張子(.jpeg, .gif等)のついたファイル名で保存してください。そのファイルを開くと、元の画像が表示されますか?
tenlife

2020/09/17 04:02

コメントありがとうございます! データベースとstorage内にある拡張子を直接pngに変換しましたが表示されませんでした。 $extension = \File::extension($read_temp_path);で拡張子の取得はできたのですが(現在はtxt)、これを元の画像の拡張子に変換して保存する。という理解であっていますか? 元の画像の拡張子([object File]で送られています)の取得方法、拡張子の変更について参考になるサイト、考え方を教えていただきたいです。
coco_bauer

2020/09/17 04:29

「画像データをファイルに変換してデータベースに保存」というのが良く判らないのですが、お使いのデータベースはファイルサーバのようにファイルを保存し、外からアクセスできるような機能をもっているのですか?
tenlife

2020/09/17 06:23

/storage/app/public以下に写真ファイルを起きデータベースに保存するのは写真ファイルまでのパス、という形で進めようとしています。
kuma_kuma_

2020/09/19 01:35

そのテキストをテキストエディタで開いて見てください data:image/png;base64,xxxxx...= みたいな文字列になっていませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問