X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/79f6dc00a366fbb318ac70db7ec1128615482655..refs/pull/1756/head:/app/Uploads/ImageService.php diff --git a/app/Uploads/ImageService.php b/app/Uploads/ImageService.php index 63c3b3172..e7668471b 100644 --- a/app/Uploads/ImageService.php +++ b/app/Uploads/ImageService.php @@ -7,6 +7,7 @@ use DB; use Exception; use Illuminate\Contracts\Cache\Repository as Cache; use Illuminate\Contracts\Filesystem\Factory as FileSystem; +use Illuminate\Support\Str; use Intervention\Image\Exception\NotSupportedException; use Intervention\Image\ImageManager; use phpDocumentor\Reflection\Types\Integer; @@ -45,9 +46,9 @@ class ImageService extends UploadService */ protected function getStorage($type = '') { - $storageType = config('filesystems.default'); + $storageType = config('filesystems.images'); - // Override default location if set to local public to ensure not visible. + // Ensure system images (App logo) are uploaded to a public space if ($type === 'system' && $storageType === 'local_secure') { $storageType = 'local'; } @@ -73,8 +74,7 @@ class ImageService extends UploadService int $resizeWidth = null, int $resizeHeight = null, bool $keepRatio = true - ) - { + ) { $imageName = $uploadedFile->getClientOriginalName(); $imageData = file_get_contents($uploadedFile->getRealPath()); @@ -141,12 +141,12 @@ class ImageService extends UploadService $imagePath = '/uploads/images/' . $type . '/' . Date('Y-m') . '/'; while ($storage->exists($imagePath . $imageName)) { - $imageName = str_random(3) . $imageName; + $imageName = Str::random(3) . $imageName; } $fullPath = $imagePath . $imageName; if ($secureUploads) { - $fullPath = $imagePath . str_random(16) . '-' . $imageName; + $fullPath = $imagePath . Str::random(16) . '-' . $imageName; } try { @@ -221,7 +221,7 @@ class ImageService extends UploadService $storage->put($thumbFilePath, $thumbData); $storage->setVisibility($thumbFilePath, 'public'); - $this->cache->put('images-' . $image->id . '-' . $thumbFilePath, $thumbFilePath, 60 * 72); + $this->cache->put('images-' . $image->id . '-' . $thumbFilePath, $thumbFilePath, 60 * 60 * 72); return $this->getPublicUrl($thumbFilePath); } @@ -235,7 +235,7 @@ class ImageService extends UploadService * @return string * @throws ImageUploadException */ - protected function resizeImage(string $imageData, $width = 220, $height = null, $keepRatio = true) + protected function resizeImage(string $imageData, $width = 220, $height = null, bool $keepRatio = true) { try { $thumb = $this->imageTool->make($imageData); @@ -336,6 +336,7 @@ class ImageService extends UploadService $image = $this->saveNewFromUrl($userAvatarUrl, 'user', $imageName); $image->created_by = $user->id; $image->updated_by = $user->id; + $image->uploaded_to = $user->id; $image->save(); return $image; @@ -417,7 +418,7 @@ class ImageService extends UploadService $isLocal = strpos(trim($uri), 'http') !== 0; // Attempt to find local files even if url not absolute - $base = baseUrl('/'); + $base = url('/'); if (!$isLocal && strpos($uri, $base) === 0) { $isLocal = true; $uri = str_replace($base, '', $uri); @@ -442,7 +443,12 @@ class ImageService extends UploadService return null; } - return 'data:image/' . pathinfo($uri, PATHINFO_EXTENSION) . ';base64,' . base64_encode($imageData); + $extension = pathinfo($uri, PATHINFO_EXTENSION); + if ($extension === 'svg') { + $extension = 'svg+xml'; + } + + return 'data:image/' . $extension . ';base64,' . base64_encode($imageData); } /** @@ -458,7 +464,7 @@ class ImageService extends UploadService // Get the standard public s3 url if s3 is set as storage type // Uses the nice, short URL if bucket name has no periods in otherwise the longer // region-based url will be used to prevent http issues. - if ($storageUrl == false && config('filesystems.default') === 's3') { + if ($storageUrl == false && config('filesystems.images') === 's3') { $storageDetails = config('filesystems.disks.s3'); if (strpos($storageDetails['bucket'], '.') === false) { $storageUrl = 'https://' . $storageDetails['bucket'] . '.s3.amazonaws.com'; @@ -469,7 +475,7 @@ class ImageService extends UploadService $this->storageUrl = $storageUrl; } - $basePath = ($this->storageUrl == false) ? baseUrl('/') : $this->storageUrl; + $basePath = ($this->storageUrl == false) ? url('/') : $this->storageUrl; return rtrim($basePath, '/') . $filePath; } }