性能原因,我需要的是拇指版本保持png格式和擴展名。格式似乎正在轉換,但它一直保存帶有.jpg擴展名的圖像。Rails和Carrierwave,保存具有不同擴展名的版本
所以我有這樣的代碼爲我的頭像:
class UserAvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
version :large do
process resize_to_fit: [ 600, 600 ], convert: 'jpg'
end
version :small, from_version: :large do
process resize_to_fill: [ 216, 216 ], convert: 'jpg'
end
version :thumb, from_version: :small do
process resize_to_fill: [ 80, 80 ], convert: 'png'
end
version :tiny, from_version: :thumb do
process resize_to_fill: [ 50, 50 ], convert: 'png'
end
def filename
"#{secure_token}.#{file.extension}" if original_filename.present?
end
protected
def secure_token
var = :"@#{mounted_as}_secure_token"
model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
end
end
,並保存圖像這樣的:
- cbc9418c-ffaa-49da-A530-f940d3da2868.jpg
- large_cbc9418c -ffaa-49da-a530-f940d3da2868.jpg
- small_cbc9418c-ffaa-49da-a530-f940d3da2868.jpg
- thumb_cbc9 418C-ffaa-49da-A530-f940d3da2868.jpg
- tiny_cbc9418c-ffaa-49da-A530-f940d3da2868.jpg
甚至當我整個代碼改變爲:
class UserAvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
version :large do
process resize_to_fit: [ 600, 600 ], convert: :jpg
end
version :small do
process resize_to_fill: [ 216, 216 ], convert: :jpg
end
version :thumb do
process resize_to_fill: [ 80, 80 ], convert: :png
end
version :tiny do
process resize_to_fill: [ 50, 50 ], convert: :png
end
end
它不斷保存帶有jpg擴展名的圖像,WTF。
我對此感到瘋狂,有什麼建議嗎?
UPDATE
我曾嘗試下一個代碼
class UserAvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
version :large do
process resize_to_fit: [ 600, 600 ], convert: :jpg
end
version :small do
process resize_to_fill: [ 216, 216 ], convert: :jpg
end
version :thumb do
process resize_to_fill: [ 80, 80 ], convert: :png
end
version :tiny do
process resize_to_fill: [ 50, 50 ], convert: :png
end
def filename
"#{secure_token}.#{file.extension}" if original_filename.present?
end
protected
def secure_token
var = :"@#{mounted_as}_secure_token"
model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
end
end
它上傳正確的圖像,S3,但隨後user.avatar保存所有版本以.jpg WTF !!!!。這是很奇怪的,現在發生了什麼......
控制檯:
> user = User.find(id)
> user.avatar.recreate_versions!
> user.save!
> user.avatar.large.url
=> "http://bucket.s3.amazonaws.../large_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.small.url
=> "http://bucket.s3.amazonaws.../small_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.thumb.url
=> "http://bucket.s3.amazonaws.../thumb_96a1f5a4-cf07-490f-9711-618e04071950.png"
> user.avatar.tiny.url
=> "http://bucket.s3.amazonaws.../tiny_96a1f5a4-cf07-490f-9711-618e04071950.png"
> reload!
> user = User.find(id)
> user.avatar.large.url
=> "http://bucket.s3.amazonaws.../large_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.small.url
=> "http://bucket.s3.amazonaws.../small_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.thumb.url
=> "http://bucket.s3.amazonaws.../thumb_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.tiny.url
=> "http://bucket.s3.amazonaws.../tiny_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
我恨你CARRIERWAVE
嘗試在版本塊內定義文件名方法。看看這個問題。它可以幫助你:https://github.com/carrierwaveuploader/carrierwave/issues/378 –