X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/7bcd967fd9a6dc25be81fcccbe7f1d4df17a7b3e..refs/pull/63/head:/app/Services/ImageService.php diff --git a/app/Services/ImageService.php b/app/Services/ImageService.php index 0a4ef8849..47c27cd0a 100644 --- a/app/Services/ImageService.php +++ b/app/Services/ImageService.php @@ -3,6 +3,8 @@ use BookStack\Exceptions\ImageUploadException; use BookStack\Image; use BookStack\User; +use Exception; +use Intervention\Image\Exception\NotSupportedException; use Intervention\Image\ImageManager; use Illuminate\Contracts\Filesystem\Factory as FileSystem; use Illuminate\Contracts\Filesystem\Filesystem as FileSystemInstance; @@ -88,9 +90,11 @@ class ImageService } $fullPath = $imagePath . $imageName; - if(!is_writable(dirname(public_path($fullPath)))) throw new ImageUploadException('Image Directory ' . public_path($fullPath) . ' is not writable by the server.'); - - $storage->put($fullPath, $imageData); + try { + $storage->put($fullPath, $imageData); + } catch (Exception $e) { + throw new ImageUploadException('Image Path ' . $fullPath . ' is not writable by the server.'); + } $imageDetails = [ 'name' => $imageName, @@ -116,10 +120,12 @@ class ImageService * Checks the cache then storage to avoid creating / accessing the filesystem on every check. * * @param Image $image - * @param int $width - * @param int $height - * @param bool $keepRatio + * @param int $width + * @param int $height + * @param bool $keepRatio * @return string + * @throws Exception + * @throws ImageUploadException */ public function getThumbnail(Image $image, $width = 220, $height = 220, $keepRatio = false) { @@ -136,8 +142,16 @@ class ImageService return $this->getPublicUrl($thumbFilePath); } - // Otherwise create the thumbnail - $thumb = $this->imageTool->make($storage->get($image->path)); + try { + $thumb = $this->imageTool->make($storage->get($image->path)); + } catch (Exception $e) { + if ($e instanceof \ErrorException || $e instanceof NotSupportedException) { + throw new ImageUploadException('The server cannot create thumbnails. Please check you have the GD PHP extension installed.'); + } else { + throw $e; + } + } + if ($keepRatio) { $thumb->resize($width, null, function ($constraint) { $constraint->aspectRatio();