diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 269a6d43088c77dba8b2733f1d3adaee0da8db69..97c25bfdafca186f0c2be97e3563ecf71799e137 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -1522,7 +1522,7 @@ function template_preprocess_file_link(&$variables) {
   $variables['attributes']->addClass($classes);
   $variables['file_size'] = format_size($file->getSize() ?? 0);
 
-  $variables['link'] = Link::fromTextAndUrl($link_text, $url->setOptions($options))->toRenderable();
+  $variables['link'] = Link::fromTextAndUrl($link_text, $url->mergeOptions($options))->toRenderable();
 }
 
 /**
diff --git a/core/modules/file/tests/src/Kernel/Formatter/FileEntityFormatterTest.php b/core/modules/file/tests/src/Kernel/Formatter/FileEntityFormatterTest.php
index d48a58089a5685cd1a19eb01a69683d493536238..a32838bd650ffcdcf448376664d486cc1434a08e 100644
--- a/core/modules/file/tests/src/Kernel/Formatter/FileEntityFormatterTest.php
+++ b/core/modules/file/tests/src/Kernel/Formatter/FileEntityFormatterTest.php
@@ -16,7 +16,7 @@ class FileEntityFormatterTest extends KernelTestBase {
   /**
    * {@inheritdoc}
    */
-  protected static $modules = ['file', 'user'];
+  protected static $modules = ['file', 'user', 'file_test'];
 
   /**
    * The files.
@@ -171,4 +171,22 @@ public function testFormatterFileSize() {
     }
   }
 
+  /**
+   * Tests the file_link field formatter using a query string.
+   */
+  public function testFormatterFileLinkWithQueryString() {
+    $file = File::create([
+      'uri' => 'dummy-external-readonly://file-query-string?foo=bar',
+      'filename' => 'file-query-string',
+    ]);
+    $file->save();
+    $file_link = [
+      '#theme' => 'file_link',
+      '#file' => $file,
+    ];
+
+    $output = \Drupal::service('renderer')->renderRoot($file_link);
+    $this->assertStringContainsString($this->fileUrlGenerator->generate('dummy-external-readonly://file-query-string?foo=bar')->toUriString(), $output);
+  }
+
 }