前提・実現したいこと
Laravelで動画アップロードをしたいのですが、動画のみできません。
jTinderでフロントエンドは実装、画像はアップロードできるものの、
動画のアップロードを行うためにバリテーションの変更なども完了済み
最終的な実装イメージはTiktokのように音声や動画がスワイプされるUIです。
(もともと参考にしたいサイトもjTinderも画像のみアップロードする仕様のため、
変数の文言はimageとなってます)
バリテーション
https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
実装環境
・Laravel、Cloud9環境
状況
・画像はアップロードできている
・php.iniでアップロードサイズ、ポストサイズを調整、メモリは最大に変更済み
・アップロードを試みた動画ファイルはmp4、mpeg、mpeg4
発生している問題・エラーメッセージ
エラーメッセージ エラーはなく、アップロードボタンを押してもアップロード画面で遷移しない(画像は登録される。動画のみ)
###該当のソースコード
PHP
1RegisterController.php 2 3 4ソースコード 5<?php 6 7namespace App\Http\Controllers\Auth; 8 9use App\Http\Controllers\Controller; 10use App\Providers\RouteServiceProvider; 11use App\User; 12use Illuminate\Foundation\Auth\RegistersUsers; 13use Illuminate\Support\Facades\Hash; 14use Illuminate\Support\Facades\Validator; 15use Illuminate\Http\Request; 16use Intervention\Image\Facades\Image; 17use App\Services\CheckExtensionServices;//拡張子 18use App\Services\FileUploadServices; //ファイルアップロード 19 20 21class RegisterController extends Controller 22{ 23 24 protected $redirectTo = RouteServiceProvider::HOME; 25 26 27 protected function validator(array $data) 28 { 29 30 //バリテーション 31 return Validator::make($data, [ 32 'name' => ['required', 'string', 'max:255'], 33 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 34 'password' => ['required', 'string', 'min:4', 'confirmed'], 35 'img_name' => ['file','mimes:jpeg,png,jpg,mp3,mp4v-es,mpeg,quicktime,mpv,mp4,mpeg4-generic,mpeg4', 'max:200G'], 36 'self_introduction' => ['string', 'max:255'], 37 ]); 38 } 39 40 /** 41 * Create a new user instance after a valid registration. 42 * 43 * @param array $data 44 * @return \App\User 45 */ 46 47 protected function create(array $data) 48 { 49 50 $imageFile = $data['img_name']; 51 52 $list = FileUploadServices::fileUpload($imageFile); 53 54 list($extension, $fileNameToStore, $fileData) = $list; 55 $data_url = CheckExtensionServices::checkExtension($fileData, $extension); 56 57 $image = Image::make($data_url); 58 59 60 return User::create([ 61 'name' => $data['name'], 62 'email' => $data['email'], 63 'password' => Hash::make($data['password']), 64 'self_introduction' => $data['self_introduction'], 65 'sex' => $data['sex'], 66 'img_name' => $fileNameToStore, 67 68 ]); 69 } 70 71 72}
PHP
1FileUploadServices.php 2<?php 3 4namespace App\Services; 5 6class FileUploadServices 7{ 8 public static function fileUpload($imageFile){ 9 10 $fileNameWithExt = $imageFile->getClientOriginalName(); 11 12 $fileName = pathinfo($fileNameWithExt, PATHINFO_FILENAME); 13 14 $extension = $imageFile->getClientOriginalExtension(); 15 16 $fileNameToStore = $fileName.'_'.time().'.'.$extension; 17 18 $fileData = file_get_contents($imageFile->getRealPath()); 19 20 $list = [$extension, $fileNameToStore, $fileData]; 21 22 return $list; 23 24 } 25 26} 27 28 29
PHP
1CheckExtensionServices.php 2<?php 3 4namespace App\Services; 5class CheckExtensionServices 6{ 7 8 public static function checkExtension($fileData, $extension){ 9 10 $extension = mb_strtolower($extension); 11 12 if ($extension === 'jpg'){ 13 $data_url = 'data:image/jpg;base64,'. base64_encode($fileData); 14 } 15 16 if ($extension === 'jpeg'){ 17 $data_url = 'data:image/jpg;base64,'. base64_encode($fileData); 18 } 19 20 if ($extension === 'png'){ 21 $data_url = 'data:image/png;base64,'. base64_encode($fileData); 22 } 23 24 if ($extension === 'gif'){ 25 $data_url = 'data:image/gif;base64,'. base64_encode($fileData); 26 } 27 28 if ($extension === 'mp4'){ 29 $data_url = 'data:video/mp4;base64,'. base64_encode($fileData); 30 } 31 32 if ($extension === 'mpeg'){ 33 $data_url = 'data:video/mpeg;base64,'. base64_encode($fileData); 34 } 35 36 if ($extension === 'mpeg4'){ 37 $data_url = 'data:video/mpeg4;base64,'. base64_encode($fileData); 38 } 39 40 if ($extension === 'mpeg4-generic'){ 41 $data_url = 'data:video/mpeg4-generic;base64,'. base64_encode($fileData); 42 } 43 return $data_url; 44 } 45} 46 47 48
試したこと
・下記を-1、300G、200Gに変更(何度かこのサイズも変えて検証を実施済)
memory_limit – PHPの実行に使用するメモリの使用容量。
post_max_size – 送信できるPOSTデータの許容サイズ
upload_max_filesize – ファイルアップロードの許容サイズ。
https://gray-code.com/php/setting-for-file-upload-by-phpini/
・バリテーションにmp4等を追加
ここに問題に対して試したことを記載してください。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/15 13:28