namespace BookStack\Uploads;
+use BookStack\Util\FilePathNormalizer;
use Illuminate\Contracts\Filesystem\Filesystem;
use Illuminate\Filesystem\FilesystemAdapter;
-use League\Flysystem\WhitespacePathNormalizer;
use Symfony\Component\HttpFoundation\StreamedResponse;
class ImageStorageDisk
*/
protected function adjustPathForDisk(string $path): string
{
- $path = (new WhitespacePathNormalizer())->normalizePath(str_replace('uploads/images/', '', $path));
+ $trimmed = str_replace('uploads/images/', '', $path);
+ $normalized = FilePathNormalizer::normalize($trimmed);
if ($this->usingSecureImages()) {
- return $path;
+ return $normalized;
}
- return 'uploads/images/' . $path;
+ return 'uploads/images/' . $normalized;
}
/**
return $this->filesystem->get($this->adjustPathForDisk($path));
}
+ /**
+ * Get a stream to the file at the given path.
+ * @returns ?resource
+ */
+ public function stream(string $path): mixed
+ {
+ return $this->filesystem->readStream($this->adjustPathForDisk($path));
+ }
+
/**
* Save the given image data at the given path. Can choose to set
* the image as public which will update its visibility after saving.