活动存储SVG?

Vis*_*vić 3 storage svg ruby-on-rails image

我目前在将项目从Paperclip迁移到ActiveStorage时遇到问题。更确切地说,我在使用ActiveStorage和存储svg映像时遇到问题。

我知道svg文件是图像,但它们不是可变图像。因此,由于某种原因,活动存储正在创建下载链接,这就是为什么svg文件未显示在浏览器中的原因。

主动存储忽略了content_type例如(从我的种子中):

job = Job.create(career.except(:icon, :og_image))
job.icon.attach(io: career[:icon], filename: 
File.basename(career[:icon].path), content_type: 'image/svg+xml' )
job.og_image.attach(io: career[:og_image], filename: 
File.basename(career[:og_image].path), content_type: 'image/png' )
Run Code Online (Sandbox Code Playgroud)

尽管“ iamge / svg + xml”是有效的映像类型,但活动存储属于“应用程序/八位字节流”。我从模型中删除了所有验证,并将miniMagick gem添加到我的gemfile中。对于png和jpg文件,它可以完美运行。

我的问题是,我在做什么错?ActiveStorage甚至支持svg文件吗?

Vis*_*vić 7

将此代码添加到您的config / application.rb中:

# Hack for allowing SVG files. While this hack is here, we should **not**
# allow arbitrary SVG uploads. https://github.com/rails/rails/issues/34665

ActiveStorage::Engine.config
.active_storage
.content_types_to_serve_as_binary
.delete('image/svg+xml')
Run Code Online (Sandbox Code Playgroud)

您当然可以删除评论:)。希望能帮助到你。

  • 减少黑客攻击的方法是使用常规环境配置(例如,在config / application.rb或特定环境配置之一中),例如:config.active_storage.content_types_to_serve_as_binary-= ['image / svg + xml'] 。ActiveStorage :: Engine是一个私有API,因此使用config可能会更可靠。 (2认同)