2017-09-20 7 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); 

위의 작품,하지만 문제는 큰 이미지입니다 :

을 컨트롤러 방법 : 여기에 내가 시도하는 것이다. 가능한 한 빨리 크기를 메모리/처리 시간을 낭비하지 않는 10 MB 제한을 초과하고 이미지 허용 된 파일 크기 제한을 초과하는 사용자에게 반환 오류를 감지하고 싶습니다.

100MB 이미지를 base64로 보내면 Laravel에서 PostTooLargeException이라는 오류가 발생합니다. 물론 base64의 크기가 너무 크기 때문입니다. 그렇다면 실제 이미지가 10MB 한도를 넘었다는 사실을 어떻게 감지하고 사용자에게 정상적인 오류를 반환 할 수 있습니까?

답변

1

이 줄 :

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

는 이미지 리소스를 생성하고 문자열로 캐스팅 할 때 당신에게 빈 하나를 제공합니다.

$image_size = strlen($base64_image); 

를하고 크기가 10MB보다 큰 있는지 확인하십시오

당신은 다음과 같이 실제 문자열의 길이를 얻을 필요가있다.

+0

나의 실수, 그것을 지적 해 주셔서 감사합니다 :) – Wonka

0

일반적으로 base64 표현은 원본 이미지의 약 135 %입니다. 문자열이 gzip 된 경우이 값을 변경할 수 있습니다.

두 개의 이미지를 사용하여 편차 비율을 계산하는 gzip 및 feom의 유무에 관계없이 base64로 변환합니다.

+0

맞아, 나는 그것을 발견했지만, 예외적 인 이유로 Laravel에서이 문제를 특별히 처리하려고합니다. 주로이 이미지에 대한 Laravel의 PostTooLargeException을 감지하고 적절한 오류로 응답합니다. – Wonka