diff --git a/app/uploaders/packages/gcs_signed_url_metadata.rb b/app/uploaders/packages/gcs_signed_url_metadata.rb
index 10f68abeab430e024d5d18606711cce15a13b09f..2f1a87b508c5fda0bd81c733e499ec5b06f5b15f 100644
--- a/app/uploaders/packages/gcs_signed_url_metadata.rb
+++ b/app/uploaders/packages/gcs_signed_url_metadata.rb
@@ -19,7 +19,7 @@ def url(*args, **kwargs)
         'x-goog-custom-audit-gitlab-size-bytes' => model.try(:size) || size
       }.compact.transform_values(&:to_s)
 
-      super(*args, **kwargs.merge(query: metadata_params))
+      super(*args, **kwargs.deep_merge(query: metadata_params))
     rescue StandardError => e
       Gitlab::ErrorTracking.track_exception(
         e,
diff --git a/spec/requests/projects/packages/package_files_controller_spec.rb b/spec/requests/projects/packages/package_files_controller_spec.rb
index 0f934b4a451c1501f30da335e9e8521d6a274c83..623a57221fdf7c1ae0ed61c1999e699527195ed7 100644
--- a/spec/requests/projects/packages/package_files_controller_spec.rb
+++ b/spec/requests/projects/packages/package_files_controller_spec.rb
@@ -25,6 +25,36 @@
         .to eq(%(attachment; filename="#{filename}"; filename*=UTF-8''#{filename}))
     end
 
+    context 'when the fog provider is Google and on .com', :saas do
+      let(:package_file) { create(:package_file, :object_storage, package: package, file_name: filename) }
+
+      before do
+        stub_package_file_object_storage(
+          config: Gitlab.config.packages.object_store.merge(connection: {
+            provider: 'Google',
+            google_storage_access_key_id: 'test-access-id',
+            google_storage_secret_access_key: 'secret'
+          }),
+          proxy_download: true
+        )
+      end
+
+      it 'send the correct headers' do
+        subject
+
+        command, encoded_params = response.headers[::Gitlab::Workhorse::SEND_DATA_HEADER].split(':')
+        params = Gitlab::Json.parse(Base64.urlsafe_decode64(encoded_params))
+
+        expect(command).to eq('send-url')
+        expect(params['URL']).to include(
+          %(response-content-disposition=attachment%3B%20filename%3D%22#{filename}),
+          'x-goog-custom-audit-gitlab-project',
+          'x-goog-custom-audit-gitlab-namespace',
+          'x-goog-custom-audit-gitlab-size-bytes'
+        )
+      end
+    end
+
     context 'when file name has directory structure' do
       let(:filename) { 'dir%2Ffile.zip' }