[英]How to display SVG as images with Active Storage
我目前在將我的項目從 Paperclip 移動到 ActiveStorage 時遇到問題。 更准確地說,我在使用 ActiveStorage 和存儲 svg 圖像時遇到問題。
我知道 svg 文件是圖像,但它們不是可變圖像。 由於某種原因,Active storage 正在創建下載鏈接,這就是 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' )
盡管“iamge/svg+xml”是有效的圖像類型,但活動存儲屬於“application/octet-stream”。 我已經從我的模型中刪除了所有驗證,並將 miniMagick gem 添加到我的 gemfile 中。 對於 png 和 jpg 文件,它工作得很好。
我的問題是,我做錯了什么? ActiveStorage 甚至支持 svg 文件嗎?
將此代碼添加到您的 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')
您當然可以刪除評論:)。 希望能幫助到你。
Svg 被認為是二進制內容類型,所以這就是為什么 Active storage svg 鏈接被表示為下載附件鏈接的原因。 您可以在此鏈接https://github.com/rails/rails/blob/master/activestorage/lib/active_storage/engine.rb查看所有 content_types 和限制。
有關此限制和解釋的更多信息,請參見此處:http: //github.com/jdelStrother/rails/commit/06ab7b27ea1c1ab357085439abacdb464f6742bf 。 我會為此發布一個問題。 也許他們將來會修復它
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.