Drupal 9 Custom Local Stream Wrapper

This is a modified snippet from a live real estate project to define a custom stream wrapper.

Add the stream wrapper as a service in your services YML file:

    stream_wrapper.pics:
      class: Drupal\mymod\PicsStreamWrapper
      tags:
        - { name: stream, scheme: pics }



Create the stream wrapper class extending LocalStream:

    <?php

    namespace Drupal\mymod;

    use Drupal\Core\StreamWrapper\LocalStream;

    class PicsStreamWrapper extends LocalStream {

        public function getDirectoryPath() {
            return 'sites/default/files/pics';
        }

        public function getExternalUrl() {
            global $base_url;

            $path = str_replace('\\', '/', $this->getTarget());

            return $base_url . '/' . self::getDirectoryPath() . '/' . $path;
        }

        public function getName() {
            return 'Pics Stream';
        }

        public function getDescription() {
            return 'Pics stream for listing property pics.';
        }
    }


    
dwcdev