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

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

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

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Laravel

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

PHP

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

Q&A

1回答

584閲覧

storeで写真を保存する際に拡張子を変更したい。現在は.binになってしまいます。

tenlife

総合スコア70

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Laravel

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

PHP

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

保存

保存(save)とは、特定のファイルを、ハードディスク等の外部記憶装置に記録する行為を指します。

0グッド

0クリップ

投稿2020/09/24 04:00

編集2020/09/25 05:10

base64から写真ファイルを作ったものを保存する作業をしています。保存する際に拡張子が.binになってしまうところで作業が止まってしまいました。

解決したい事: 写真ファイルをstoreする時に拡張子を変更したいです(pngなどに)

現状: 写真ファイルをstoreすると.bin拡張子で保存されてしまいます。

$fileData = base64_decode($edit_base64); $tmpFilePath = sys_get_temp_dir() . '/' . Str::uuid()->toString(); file_put_contents($tmpFilePath, $fileData); $tmpFile = new File($tmpFilePath); $file = new UploadedFile( $tmpFile->getPathname(), $tmpFile->getFilename(), $tmpFile->getMimeType(), 0, true ); $path = $file->store('public'); //ここで.binで保存されてしまいます。 $extension = \File::extension($path); $read_temp_path = str_replace('public/', '/storage/', $path);
中身 $file => Illuminate\Http\UploadedFile {#1341 path: "/var/folders/kj/jv_tl7g96hg_ygkpyvkg96880000gn/T", filename: "0aa80174-79d6-4506-8e60-a45d2707336a", basename: "0aa80174-79d6-4506-8e60-a45d2707336a", pathname: "/var/folders/kj/jv_tl7g96hg_ygkpyvkg96880000gn/T/0aa80174-79d6-4506-8e60-a45d2707336a", extension: "", realPath: "/private/var/folders/kj/jv_tl7g96hg_ygkpyvkg96880000gn/T/0aa80174-79d6-4506-8e60-a45d2707336a", aTime: 2020-09-24 12:42:11, mTime: 2020-09-24 12:42:11, cTime: 2020-09-24 12:42:11, inode: 24929845, size: 118387, perms: 0100644, owner: 501, group: 20, type: "file", writable: true, readable: true, executable: false, file: true, dir: false, link: false, } $path => "public/TVOMOexr5O5SLZih17pCW5iljss1FAjKpOC4IPsH.bin" $extension => "bin" $read_temp_path => "/storage/TVOMOexr5O5SLZih17pCW5iljss1FAjKpOC4IPsH.bin"

元の写真はpng拡張子です。
$fileのextensionを調整するのか、phpのimagepngなどを使っていくのでしょうか?

storeする際に拡張子を変更するにはどの様な処理を書けば良いのか見つけられずに止まってしまいました。
お分かりになる方、参考になるものを知っている方、ご教授お願いしたいです。
よろしくお願いいたします。

laravel7.x
php 7.4.8

調べたサイト
https://www.php.net/manual/ja/function.imagepng.php
https://qiita.com/naoqoo2/items/029d1761f48d5e739dd6

追記
ここを参考にimagecreatefromstring($fileData)を実行しましたが、下記の様に表示されてしまいます。

PHP Warning: imagecreatefromstring(): Data is not in a recognized format in Psy Shell code on line 3 => false

状態としてはこちらと似ているのではと考えています。

追記2
storeAs()でファイル名を指定して保存してみましたが、拡張子は変更され保存されるも表示すると空判定です。

$path = $file->storeAs('public', 'example.png'); 下記でもpngで保存できますが、表示できません。 $file_store_file_name =$tmpFile->getFilename().".png"; $path = $file->storeAs('public', $file_store_file_name);

追記3
Mineタイプが本来は"image/png"になって欲しいんですが、今の状態だとファイルの情報が分かってないっぽいです。
参考

$tmpFile->getMimeType() => "application/octet-stream"

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

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

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

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

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

guest

回答1

0

問題解決できるかわかりませんが。。。。

composer require intervention/image config/app.php 'providers' => [ // 省略 Intervention\Image\ImageServiceProvider::class ] 'aliases' => [ // 省略 'Image' => Intervention\Image\Facades\Image::class ]
<?php namespace App\Traits; use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\Storage; use Illuminate\Support\Str; /** * Trait UploadAble * @package App\Traits */ trait UploadAble { /** * @param UploadedFile $file * @param null $folder * @param string $disk * @param null $filename * @return false|string */ public function uploadOne(UploadedFile $file, $folder = null, $disk = 'public', $filename = null, $encode = false) { $name = !is_null($filename) ? $filename : Str::random(25); if($encode){ //php artisan vendor:publish --provider="Intervention\Image\ImageServiceProviderLaravel5" //ImageMagickを使用 config/image 変更 // 'driver' => 'gd' //'driver' => 'imagick' //デコード必要 $data_url = 'data:image/png;base64,'. base64_encode($data); $img = \Image::make($file); $file = $img->encode('jpg'); } return $file->storeAs( $folder, $name . "." . $file->getClientOriginalExtension(), $disk ); } /** * @param null $path * @param string $disk */ public function deleteOne($path = null, $disk = 'public') { Storage::disk($disk)->delete($path); } }

投稿2020/09/29 07:45

_makoto

総合スコア38

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問