目前使用Carrierwave,在创建不同版本之后上传像foo.png这样的文件:
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :fog
def store_dir
"#{model.class.to_s.underscore}/#{model.id}"
end
version :thumb do
process :resize_to_fit => [500, 500]
end
end
导致文件上传为:
thumb_foo.png
foo.png
出于SEO原因,我想将拇指移动到文件名的末尾。基于他们docs,我在这里添加了:
def full_filename(for_file)
if parent_name = super(for_file)
extension = File.extname(parent_name)
base_name = parent_name.chomp(extension)
[base_name, version_name].compact.join("_") + extension
end
end
def full_original_filename
parent_name = super
extension = File.extname(parent_name)
base_name = parent_name.chomp(extension)
[base_name, version_name].compact.join("_") + extension
end
文档说这应该导致:
foo_thumb.png
foo.png
但是,我最终得到了以下内容:
thumb_foo_thumb.png
foo.png
知道我做错了吗?
由于
答案 0 :(得分:2)
只需在#full_filename
块下使用version
:
class AvatarUploaer < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
version :thumb do
process resize_to_fill: [50, 50]
def full_filename(for_file = model.logo.file)
parts = for_file.split('.')
extension = parts[-1]
name = parts[0...-1].join('.')
"#{name}_#{version_name}.#{extension}"
end
end
end
结果如下:
/Users/user/app/uploads/1x1.gif
/Users/user/app/uploads/1x1_thumb.gif
答案 1 :(得分:0)
如果你有很多版本,那么接受的答案会变得有点单调乏味。
我最终覆盖了所有内容的full_filename,而不是每个单独的版本定义。它工作正常。这适用于Carrierwave 1.0
photo_uploader.rb
# Override the filename of the uploaded files:
def full_filename(name)
"#{File.basename(name, '.*')}_#{version_name || 'original'}#{File.extname(name)}"
end
我使用内置的File.basename和File.extname方法,而不是手动执行,如接受的答案中所示(尽管那是我开始的地方,而且代码工作正常)。< / p>
注意:我想添加&#34;原创&#34;对于无版本上传只是为了使我的目录列表看起来更干净。这部分可以很容易地删除。
foo_mobile.jpg
foo_original.jpg
foo_square.jpg
答案 2 :(得分:-1)
在当前版本的CarrierWave中,如果你有一个像这样定义的上传器:
var mongoose = require('mongoose');
var assert = require('assert');
var Fruits = require('./models/fruits-1');
var url = 'mongodb://localhost:27017/confusion';
mongoose.connect(url);
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function(){
Fruits.create(
{
name: 'Apple',
description: "It's delicious."
}, function(err, fruit){
if(err){
console.log(err);
}
else{
console.log(fruit);
}
});
});
并附上文件名somefile.jpg,你最终会得到名为original.jpg,original_small.png和original_icon.png的文件。