-
Notifications
You must be signed in to change notification settings - Fork 40
Description
Hey everyone,
currently, the placeholder service just stores the result of the URI in the target file without checking for errors. If there are errors/problems in the placeholder service the result is JSON and there is an error message. I got this error, because I use filefill for large images and the images are to large for https://via.placeholder.com/ as result, there is a "jpg" file in the filesystem with a JSON error in it. Bad for further processing like EXT:webp and regular content elements.
As result I add this code after this line https://github.com/IchHabRecht/filefill/blob/main/Classes/Resource/Handler/PlaceholderResource.php#L82 to reduce the file size, if the file size is the problem. I don't check the max file dimension or different errors of the service. This code just handle my usecase.
if ($response->getHeaderLine('Content-Type') === 'application/json') {
$result = \json_decode($content);
if (isset($result->error) && $result->error === 'Requested image size is too large') {
$fileData = $fileObject->getProperties();
$fileData['identifier'] = $fileObject->getIdentifier();
$fileData['name'] = $fileObject->getName();
// half size
$fileData['width'] = floor($fileData['width'] / 2);
$fileData['height'] = floor($fileData['height'] / 2);
$fileObjectResized = new File($fileData, $fileObject->getStorage());
return $this->getFile($fileData['identifier'], $filePath, $fileObjectResized);
}
}
Perhaps PlaceholderResource.php should handle this more generall (at least throw an Exception if the result is json, so the getFile method return false).
Regards,
Tim