簡體   English   中英

如何使用 Active Storage 將 SVG 顯示為圖像

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM