我正在將 Rails 應用程式從 3 升級到 7。隨著新的 App Carrierwave 停止接受 SVG 檔案進行上傳。以前我可以上傳 svg 檔案,而無需使用此設定進行處理和創建版本:
class LogoUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
include CarrierWave::MimeTypes
process :set_content_type
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{model.id}"
end
end
由于 Carriwave 的 0.11.0 版 set_content_type 似乎已被棄用。這讓我的 SVG Uploader 只剩下:
class LogoUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{model.id}"
end
def content_type_allowlist
[/image\//]
end
end
我不想轉換 svg 并且上傳受保護并且僅對管理員可用。目前我沒有超越提交按鈕。
嘗試上傳時,我現在得到以下回應:
Started PATCH "/admin/logos/18" for ::1 at 2022-06-18 10:01:19 0200
Processing by Admin::LogosController#update as TURBO_STREAM
Parameters: {"authenticity_token"=>"[FILTERED]", "logo"=>{"file_name"=>#<ActionDispatch::Http::UploadedFile:0x00007ff1803932c0 @tempfile=#<Tempfile:/var/folders/yg/pfjwzpkx5wq9d27svk760h0h0000gn/T/RackMultipart20220618-29575-j47l79.svg>, @original_filename="some-name.svg", @content_type="image/svg xml", @headers="Content-Disposition: form-data; name=\"logo[file_name]\"; filename=\"some-name.svg\"\r\nContent-Type: image/svg xml\r\n">}, "commit"=>"Save", "id"=>"18"}
...
Completed 200 OK in 92ms (Views: 10.5ms | ActiveRecord: 0.5ms | Allocations: 8188)
我嘗試添加[/image\/svg xml//]到 content_type_allowlist 并超出了提交按鈕,但收到錯誤“提供的 Nil 位置。無法構建 URI”。
Parameters:
{"_method"=>"patch",
"authenticity_token"=>"[FILTERED]",
"logo"=>
{"file_name"=>
#<ActionDispatch::Http::UploadedFile:0x00007fb111dae5c0
@content_type="image/svg xml",
@headers="Content-Disposition: form-data; name=\"logo[file_name]\"; filename=\"some-name.svg\"\r\n" "Content-Type: image/svg xml\r\n",
@original_filename="some-name.svg",
@tempfile=#<File:/var/folders/yg/pfjwzpkx5wq9d27svk760h0h0000gn/T/RackMultipart20220618-86477-ij7mr4.svg>>},
"commit"=>"Save",
"id"=>"18"}
我想我遇到了 Carrierwave CVE-2016-3714 緩解措施。在RubyDocs 中,他們說要么禁用 ImageMagick 的默認 SVG 委托,要么使用 RSVG 委托進行 SVG 處理。
如何禁用 ImageMagick 的默認 SVG 委托?如何使用 RSVG 委托?
先感謝您。
uj5u.com熱心網友回復:
我發現在我的情況下,它與 ImageMagick 無關,而是與 Rails 5 引入的 belongs_to 關聯的驗證有關。
我不得不在 logo 模型中添加 optional: true ,現在它再次上傳。這意味著,在我的設定中(不轉換 svg 檔案)您仍然可以上傳 svg。
class Logo < ApplicationRecord
mount_uploader :file_name, LogoUploader
belongs_to :institution, optional: true
...
end
我仍然很好奇有人將如何在 Ubuntu 和 MacOS 上配置 ImageMagick。如果你知道,請分享...
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/495317.html
上一篇:無法使用設計從一頁重定向到另一頁
下一篇:如何通過api獲取媒體url
