chore: Allow more filetypes in uploads (#3557)
- Allowing the ability to upload more common file types like zip, Docx etc - Fallback for image bubble when the image URL isn't available fixes: #3270 Co-authored-by: Muhsin Keloth <muhsinkeramam@gmail.com> Co-authored-by: Nithin David <1277421+nithindavid@users.noreply.github.com>
This commit is contained in:
@@ -17,6 +17,18 @@
|
||||
|
||||
class Attachment < ApplicationRecord
|
||||
include Rails.application.routes.url_helpers
|
||||
|
||||
ACCEPTABLE_FILE_TYPES = %w[
|
||||
text/csv text/plain text/rtf
|
||||
application/json application/pdf
|
||||
application/zip application/x-7z-compressed application/vnd.rar application/x-tar
|
||||
application/msword application/vnd.ms-excel application/vnd.ms-powerpoint application/rtf
|
||||
application/vnd.oasis.opendocument.text
|
||||
application/vnd.openxmlformats-officedocument.presentationml.presentation
|
||||
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
|
||||
application/vnd.openxmlformats-officedocument.wordprocessingml.document
|
||||
].freeze
|
||||
|
||||
belongs_to :account
|
||||
belongs_to :message
|
||||
has_one_attached :file
|
||||
@@ -90,10 +102,19 @@ class Attachment < ApplicationRecord
|
||||
def acceptable_file
|
||||
return unless should_validate_file?
|
||||
|
||||
errors.add(:file, 'is too big') if file.byte_size > 40.megabytes
|
||||
validate_file_size(file.byte_size)
|
||||
validate_file_content_type(file.content_type)
|
||||
end
|
||||
|
||||
acceptable_types = ['image/png', 'image/jpeg', 'image/gif', 'image/bmp', 'image/tiff', 'application/pdf', 'audio/mpeg', 'video/mp4', 'audio/ogg',
|
||||
'text/csv'].freeze
|
||||
errors.add(:file, 'filetype not supported') unless acceptable_types.include?(file.content_type)
|
||||
def validate_file_content_type(file_content_type)
|
||||
errors.add(:file, 'type not supported') unless media_file?(file_content_type) || ACCEPTABLE_FILE_TYPES.include?(file_content_type)
|
||||
end
|
||||
|
||||
def validate_file_size(byte_size)
|
||||
errors.add(:file, 'size is too big') if byte_size > 40.megabytes
|
||||
end
|
||||
|
||||
def media_file?(file_content_type)
|
||||
file_content_type.start_with?('image/', 'video/', 'audio/')
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user