2017-09-20 11 views
0

イメージあたり10MBの制限があり、それ以上のサイズのコードは実行できません。私はそうする方法がわかりません。完全に小さな画像と上記の作品はLaravel 5.5 - 大きなBase64イメージのPostTooLargeExceptionの処理?

// Increase memory limit before processing 
ini_set('memory_limit','256M'); 

$base64_image = $request->get('base64_image'); 
$image = Image::make($base64_image); 

// Returns 0, looks like we have to encode image to get file size... 
$image_size = strlen((string) $image); 
Log::critical('image_size file size from string: ' . $image_size); 

$image = $image->encode('jpg'); 

// Returns byte size 
$image_size = strlen((string) $image); 
Log::critical('image_size file size from string: ' . $image_size); 

、しかし問題は、大きなイメージである:コントローラメソッドで

:ここに私が試したものです。私は、メモリ/処理時間を無駄にしないように、サイズが10MBの制限を超えていることを可能な限り早期に検出し、イメージが許容されるファイルサイズ制限を超えているというエラーをユーザーに返します。

100MBイメージをbase64として送信すると、Laravelは PostTooLargeExceptionというエラーをスローします。これはもちろん、post64のサイズが大きいためです。では、実際の画像が10MBの制限を超えていることを検出して、それがあればユーザーに優雅なエラーを返します。

答えて

1

このライン:

$image = Image::make($base64_image); 

は、画像リソースを作成し、あなたはそれを文字列にキャストするとき、それはあなたの空のものを提供します。

$image_size = strlen($base64_image); 

をし、それが10メガバイトより大きいですかどうかを確認:

あなたはこのように、実際の文字列の長さを取得する必要があります。

+0

私の間違い、それを指摘してくれてありがとう:) – Wonka

0

一般的なコンセンサスは、base64表現が元の画像の約135%であることです。文字列がgzipされている場合、これは変更できます。

2組の画像を使用し、gzipとfeomの有無にかかわらずbase64に変換して、偏差の割合を計算します。

+0

私はそれを見つけましたが、特に例外のためにLaravelで問題を処理しようとしています。主に、このイメージのLaravelでPostTooLargeExceptionを検出し、正常なエラーで応答します。 – Wonka

関連する問題