Fix larger video files not being transcoded (#14306)

Since #14145, the `set_type_and_extension` has been moved from
`before_post_process` to `before_file_post_process`, but while the former
runs before all validations performed by Paperclip, the latter is dependent
on the order validations and hooks are defined.

In our case, this meant video files could be checked against the generic 10MB
limit, causing validation failures, which, internally, make Paperclip skip
post-processing, and thus, transcoding of the video file.

The actual validation would then happen after the type is correctly set, so
the large file would pass validation, but without being transcoded first.

This commit moves the hook definition so that it is run before checking for
the file size.
This commit is contained in:
ThibG 2020-07-14 18:50:19 +02:00 committed by GitHub
parent 4abe3be321
commit a8e84a18f1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -165,6 +165,9 @@ class MediaAttachment < ApplicationRecord
processors: ->(f) { file_processors f }, processors: ->(f) { file_processors f },
convert_options: GLOBAL_CONVERT_OPTIONS convert_options: GLOBAL_CONVERT_OPTIONS
before_file_post_process :set_type_and_extension
before_file_post_process :check_video_dimensions
validates_attachment_content_type :file, content_type: IMAGE_MIME_TYPES + VIDEO_MIME_TYPES + AUDIO_MIME_TYPES validates_attachment_content_type :file, content_type: IMAGE_MIME_TYPES + VIDEO_MIME_TYPES + AUDIO_MIME_TYPES
validates_attachment_size :file, less_than: IMAGE_LIMIT, unless: :larger_media_format? validates_attachment_size :file, less_than: IMAGE_LIMIT, unless: :larger_media_format?
validates_attachment_size :file, less_than: VIDEO_LIMIT, if: :larger_media_format? validates_attachment_size :file, less_than: VIDEO_LIMIT, if: :larger_media_format?
@ -257,9 +260,6 @@ class MediaAttachment < ApplicationRecord
after_post_process :set_meta after_post_process :set_meta
before_file_post_process :set_type_and_extension
before_file_post_process :check_video_dimensions
class << self class << self
def supported_mime_types def supported_mime_types
IMAGE_MIME_TYPES + VIDEO_MIME_TYPES + AUDIO_MIME_TYPES IMAGE_MIME_TYPES + VIDEO_MIME_TYPES + AUDIO_MIME_TYPES