diff --git a/config/install/media_entity_download.settings.yml b/config/install/media_entity_download.settings.yml
new file mode 100644
index 0000000..8a0f0ca
--- /dev/null
+++ b/config/install/media_entity_download.settings.yml
@@ -0,0 +1 @@
+external_file_storage: FALSE
diff --git a/media_entity_download.links.menu.yml b/media_entity_download.links.menu.yml
new file mode 100644
index 0000000..8d4aed0
--- /dev/null
+++ b/media_entity_download.links.menu.yml
@@ -0,0 +1,7 @@
+media_entity_download.media_entity_download_config:
+  title: 'Media Entity Download Configuration'
+  route_name: media_entity_download.media_entity_download_config
+  description: 'Configure downloads for media entities.'
+  parent: system.admin_config_media
+  weight: 99
+
diff --git a/media_entity_download.routing.yml b/media_entity_download.routing.yml
index c6644bf..2ddfea3 100644
--- a/media_entity_download.routing.yml
+++ b/media_entity_download.routing.yml
@@ -5,3 +5,14 @@ media_entity_download.download:
     _title: 'Download Media'
   requirements:
     _permission: 'download media'
+
+media_entity_download.media_entity_download_config:
+  path: '/admin/config/media/media-entity-download'
+  defaults:
+    _form: '\Drupal\media_entity_download\Form\MediaEntityDownloadConfig'
+    _title: 'MediaEntityDownloadConfig'
+  requirements:
+    _permission: 'access administration pages'
+  options:
+    _admin_route: TRUE
+
diff --git a/src/Controller/DownloadController.php b/src/Controller/DownloadController.php
index b9ef8c9..d75ba70 100644
--- a/src/Controller/DownloadController.php
+++ b/src/Controller/DownloadController.php
@@ -2,7 +2,9 @@
 
 namespace Drupal\media_entity_download\Controller;
 
+use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\Routing\TrustedRedirectResponse;
 use Symfony\Component\HttpFoundation\BinaryFileResponse;
 use Drupal\media_entity\MediaInterface;
 use Symfony\Component\Filesystem\Exception\FileNotFoundException;
@@ -23,13 +25,21 @@ class DownloadController extends ControllerBase {
   protected $requestStack;
 
   /**
+   * Drupal\Core\Config\ConfigFactoryInterface definition.
+   *
+   * @var \Drupal\Core\Config\ConfigFactoryInterface
+   */
+  protected $config;
+
+  /**
    * DownloadController constructor.
    *
    * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
    *   The request object.
    */
-  public function __construct(RequestStack $request_stack) {
+  public function __construct(RequestStack $request_stack, ConfigFactoryInterface $config_factory) {
     $this->requestStack = $request_stack;
+    $this->config = $config_factory;
   }
 
   /**
@@ -37,7 +47,8 @@ class DownloadController extends ControllerBase {
    */
   public static function create(ContainerInterface $container) {
     return new static(
-      $container->get('request_stack')
+      $container->get('request_stack'),
+      $container->get('config.factory')
     );
   }
 
@@ -96,16 +107,24 @@ class DownloadController extends ControllerBase {
     $uri = $file->getFileUri();
     $filename = $file->getFilename();
 
-    // Or item does not exist on disk.
-    if (!file_exists($uri)) {
-      throw new FileNotFoundException(NULL, 0, NULL, $uri);
+    $external = $this->config('media_entity_download.settings')->get('external_file_storage');
+
+    if ($external) {
+      $url = file_create_url($uri);
+      $response = new TrustedRedirectResponse($url);
     }
+    else {
+      // Or item does not exist on disk.
+      if (!file_exists($uri)) {
+        throw new FileNotFoundException(NULL, 0, NULL, $uri);
+      }
 
-    $response = new BinaryFileResponse($uri);
-    $response->setContentDisposition(
-      ResponseHeaderBag::DISPOSITION_ATTACHMENT,
-      $filename
-    );
+      $response = new BinaryFileResponse($uri);
+      $response->setContentDisposition(
+        ResponseHeaderBag::DISPOSITION_ATTACHMENT,
+        $filename
+      );
+    }
 
     return $response;
   }
diff --git a/src/Form/MediaEntityDownloadConfig.php b/src/Form/MediaEntityDownloadConfig.php
new file mode 100644
index 0000000..3f95a98
--- /dev/null
+++ b/src/Form/MediaEntityDownloadConfig.php
@@ -0,0 +1,81 @@
+<?php
+
+namespace Drupal\media_entity_download\Form;
+
+use Drupal\Core\Form\ConfigFormBase;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\Core\Config\ConfigFactory;
+
+/**
+ * Class MediaEntityDownloadConfig.
+ */
+class MediaEntityDownloadConfig extends ConfigFormBase {
+
+  /**
+   * Drupal\Core\Config\ConfigFactory definition.
+   *
+   * @var \Drupal\Core\Config\ConfigFactory
+   */
+  protected $configFactory;
+  /**
+   * Constructs a new MediaEntityDownloadConfig object.
+   */
+  public function __construct(
+    ConfigFactoryInterface $config_factory,
+      ConfigFactory $config_factory
+    ) {
+    parent::__construct($config_factory);
+        $this->configFactory = $config_factory;
+  }
+
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('config.factory'),
+            $container->get('config.factory')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function getEditableConfigNames() {
+    return [
+      'media_entity_download.settings',
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'media_entity_download_config';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $config = $this->config('media_entity_download.settings');
+    $form['external_file_storage'] = [
+      '#type' => 'checkbox',
+      '#title' => $this->t('External File Storage'),
+      '#description' => $this->t('To enable handling of external files with media entity download, check this box.'),
+      '#default_value' => $config->get('external_file_storage'),
+    ];
+    return parent::buildForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    parent::submitForm($form, $form_state);
+
+    $this->config('media_entity_download.settings')
+      ->set('external_file_storage', $form_state->getValue('external_file_storage'))
+      ->save();
+  }
+
+}
