轨道 4.2,回形针宝石。无法附加.docx类型,尽管已注册 MIME 类型,content_type仍读取为'application/zip'



我已经注册了一个MIME类型,以允许回形针将.docx文件的content_type读取为application/vnd.openxmlformats-officedocument.wordprocessingml.document

但是,在测试中,content_type仍被读取为application/zip

知道为什么吗?更令人沮丧的是,.pptx.xlsxMIME 类型已经注册,这些测试通过了(urgh(。

config/initializers/mime_types.rb

Mime::Type.register 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', :docx
Mime::Type.register 'application/vnd.openxmlformats-officedocument.presentationml.presentation', :pptx
Mime::Type.register 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', :xlsx

app/models/attachment.rb

class Attachment < ActiveRecord::Base
include FormatFile
# Constants:
VALID_FILE_NAMES = [/[^a-z0-9-]+/i].freeze
VALID_IMAGE_TYPES = %w[image/jpeg image/jpg image/png image/x-icon image/bnp].freeze
VALID_CONTENT_TYPES = %w[
image/jpeg
image/jpg
image/gif
image/png
image/bmp
image/x-icon
text/plain
text/csv
application/xml
application/pdf
application/msword
application/vnd.openxmlformats-officedocument.wordprocessingml.document
application/vnd.openxmlformats-officedocument.wordprocessingml.template
application/vnd.ms-word.document.macroEnabled.12
application/vnd.ms-word.template.macroEnabled.12
application/vnd.ms-excel
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
application/vnd.openxmlformats-officedocument.spreadsheetml.template
application/vnd.ms-excel.sheet.macroEnabled.12
application/vnd.ms-excel.template.macroEnabled.12
application/vnd.ms-excel.addin.macroEnabled.12
application/vnd.ms-excel.sheet.binary.macroEnabled.12
application/vnd.ms-powerpoint
application/vnd.openxmlformats-officedocument.presentationml.presentation
application/vnd.openxmlformats-officedocument.presentationml.template
application/vnd.openxmlformats-officedocument.presentationml.slideshow
application/vnd.ms-powerpoint.addin.macroEnabled.12
application/vnd.ms-powerpoint.presentation.macroEnabled.12
application/vnd.ms-powerpoint.template.macroEnabled.12
application/vnd.ms-powerpoint.slideshow.macroEnabled.12
].freeze
# Associations:
belongs_to :attachable, polymorphic: true
# Paperclip attachments
has_attached_file :attachment,
styles:      {
medium:   ['300x300#', :png],
thumb:    ['100x100#', :png],
original: ['500x500>', :png]
},
default_url: '/images/:style/missing.png',
url:         '/system/:class/:attachment/:id_partition/:style/:hash.:extension',
path:        ':rails_root/public:url',
hash_secret: '623629947a471569fe9808ab386f6e866abde5f582485beaa24fa12032b28a21b6ee94c018fe531484bb438a7376d4a00b4bc35598de34c01f0e40b1dbb37df5'
# Validations:
validates_attachment  :attachment,
content_type: {content_type: VALID_CONTENT_TYPES},
file_name:    {matches: VALID_FILE_NAMES},
size:         {in: 0..5.megabytes}
validates_with AttachmentPresenceValidator, attributes: :attachment
# Callbacks:
before_post_process :skip_all_non_images
before_validation do
sanitize_filename attachment_file_name
end
# Don't shrink and create different styles for anything which isn't an image
def skip_all_non_images
VALID_IMAGE_TYPES.include?(attachment_content_type)
end
end

感谢您的帮助。

编辑:

根据 bkunzi01 提供的链接,我尝试了以下代码。它没有效果,.docx文件在.pptx.xlsx通过时仍然无法通过验证。

config/application.rb

Paperclip.options[:content_type_mappings] = {
docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
}

似乎新版本的回形针导致了此问题。降级到版本 4.3.1 应该可以解决您的问题

相关内容

最新更新