diff --git a/app/controllers/media_controller.rb b/app/controllers/media_controller.rb
index 6d7a51879cc9b858d5c466f128f12769ffd9cc22..0065ebbb88868a565e8c5b8fce84f4507f251175 100644
--- a/app/controllers/media_controller.rb
+++ b/app/controllers/media_controller.rb
@@ -1,12 +1,9 @@
 class MediaController < ApplicationController
   skip_before_action :authenticate_user!
 
+  before_action :load_blob
+
   def show
-    begin
-      @blob = ActiveStorage::Blob.find_signed! params[:signed_id]
-    rescue ActiveSupport::MessageVerifier::InvalidSignature
-      raise ActiveRecord::RecordNotFound
-    end
     @size = @blob.byte_size
     if @blob.variable?
       variant_service = VariantService.compute(@blob, params[:filename_with_transformations], params[:format])
@@ -24,4 +21,14 @@ class MediaController < ApplicationController
     response.headers["Content-Length"] = "#{@size}"
     redirect_to blob_or_variant_url
   end
+
+  protected
+
+  def load_blob
+    begin
+      @blob = ActiveStorage::Blob.find_signed! params[:signed_id]
+    rescue ActiveSupport::MessageVerifier::InvalidSignature
+      raise ActiveRecord::RecordNotFound
+    end
+  end
 end