У меня есть ограничение в 10 МБ для каждого изображения, и все, что больше, должно препятствовать выполнению кода. Я не уверен, как это сделать. Вот что я пробовал:
В методе контроллера:
// 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);
Вышеприведенное отлично работает с маленькими изображениями, но проблема связана с большими изображениями. Я хочу как можно раньше определить, что размер превышает ограничение в 10 МБ, чтобы не тратить память/время обработки и просто возвращать пользователю ошибку о том, что изображение превышает допустимый размер файла.
Когда я отправляю изображение размером 100 МБ в формате base64, Laravel выдает ошибку PostTooLargeException
, поскольку, конечно, размер сообщения base64 огромен. Итак, как я могу определить, что фактическое изображение превышает ограничение в 10 МБ, и вернуть пользователю изящную ошибку, если это так?