Carreirwave - 如何直接从保存的文件名创建版本名称
Carreirwave - How to have the version name created directly from the saved filename
我正在为已上传到我的应用程序的文件创建缩略图。图像名称中有一个时间戳代码。当我 运行 recreate_versions
生成的缩略图也有时间戳,但它使用当前时间戳,这使得缩略图名称与原始文件名不同。
所以我认为解决方法是为缩略图设置一个自定义文件名。基本上有'thumb_' + 'original filename'.
version :thumb do
process :resize_to_limit => [110, nil]
def full_filename(for_file = model.image_value.file)
'thumb_' + File.basename(model.image_value.path).to_s
end
end
def filename(for_file = model.image_value.file)
"#{model.id}" + "-v#{timestamp}" + "-" + "#{model.name}" + ".png" if original_filename.present?
end
def timestamp
var = :"@#{mounted_as}_timestamp"
model.instance_variable_get(var) or model.instance_variable_set(var, Time.now.to_i)
end
这似乎是一个简单的修复,但出于某种原因,当我 运行 recreate_versions
生成缩略图时,其中包含当前时间戳,而不是原始文件名中的时间戳。据我了解,它应该获取存储在数据库中的原始文件名的值,并将其添加到 'thumb_' 的末尾。但不知何故,它改变了名称中的时间戳。
stored filename = 1-v1474175808-model-name.png
Item.find(1).image_value_url(:thumb) = thumb_1-v1474175808-model-name.png #this works correctly and looks for the correct filename
thumb filename saved = thumb_1-v1472111618-model-name.png #thumb saved is different. For some reason has a different timestamp in name
我想也许 def full_filename
不是 运行,但如果我将其更改为其他内容,保存的缩略图文件名将更改为 def full_filename
.
中的内容
不确定这里发生了什么。希望有人可以提供帮助。如果它看起来应该有效,请告诉我,至少这会澄清它可能是我没有看到的东西。
我不明白你为什么要使用 instance_variable_get
和 set
。为什么不直接使用 Item
的 created_at
?那就永远不会变了。
def timestamp
model.created_at
end
最终不得不使用生成的 url 并在 url 上使用 slice!
以仅保留图像名称。
version :thumb do
process :resize_to_limit => [110, nil]
def full_filename(for_file = model.image_value.file)
raw_file_name = model.image_value.slice!(0..65)
'thumb_' + raw_file_name
end
end
我正在为已上传到我的应用程序的文件创建缩略图。图像名称中有一个时间戳代码。当我 运行 recreate_versions
生成的缩略图也有时间戳,但它使用当前时间戳,这使得缩略图名称与原始文件名不同。
所以我认为解决方法是为缩略图设置一个自定义文件名。基本上有'thumb_' + 'original filename'.
version :thumb do
process :resize_to_limit => [110, nil]
def full_filename(for_file = model.image_value.file)
'thumb_' + File.basename(model.image_value.path).to_s
end
end
def filename(for_file = model.image_value.file)
"#{model.id}" + "-v#{timestamp}" + "-" + "#{model.name}" + ".png" if original_filename.present?
end
def timestamp
var = :"@#{mounted_as}_timestamp"
model.instance_variable_get(var) or model.instance_variable_set(var, Time.now.to_i)
end
这似乎是一个简单的修复,但出于某种原因,当我 运行 recreate_versions
生成缩略图时,其中包含当前时间戳,而不是原始文件名中的时间戳。据我了解,它应该获取存储在数据库中的原始文件名的值,并将其添加到 'thumb_' 的末尾。但不知何故,它改变了名称中的时间戳。
stored filename = 1-v1474175808-model-name.png
Item.find(1).image_value_url(:thumb) = thumb_1-v1474175808-model-name.png #this works correctly and looks for the correct filename
thumb filename saved = thumb_1-v1472111618-model-name.png #thumb saved is different. For some reason has a different timestamp in name
我想也许 def full_filename
不是 运行,但如果我将其更改为其他内容,保存的缩略图文件名将更改为 def full_filename
.
不确定这里发生了什么。希望有人可以提供帮助。如果它看起来应该有效,请告诉我,至少这会澄清它可能是我没有看到的东西。
我不明白你为什么要使用 instance_variable_get
和 set
。为什么不直接使用 Item
的 created_at
?那就永远不会变了。
def timestamp
model.created_at
end
最终不得不使用生成的 url 并在 url 上使用 slice!
以仅保留图像名称。
version :thumb do
process :resize_to_limit => [110, nil]
def full_filename(for_file = model.image_value.file)
raw_file_name = model.image_value.slice!(0..65)
'thumb_' + raw_file_name
end
end