我接受每个图像的限制为10MB,任何更大的都应该阻止执行代码。我不知道该怎么做。这是我试过的:
在控制器方法中:
// 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
,因为帖子base64的大小当然很大。那么如何检测到实际图像超过10MB的限制并向用户返回一个优雅的错误呢?
答案 0 :(得分:1)
这一行:
$image = Image::make($base64_image);
创建一个图像资源,当你把它投射到一个字符串时,它会给你一个空的。
您需要获取实际字符串的长度,如下所示:
$image_size = strlen($base64_image);
并检查它是否大于10MB。
答案 1 :(得分:0)
普遍的共识是base64表示大约是原始图像的135%。如果字符串是gzip,则可以更改此设置。
使用几个图像并将它们转换为base64,使用或不使用gzip和feom来计算偏差百分比。