载波中的块点文件
Block dotfiles in carrierwave
我想允许通过载波上传器上传(所有可能的)图像文件。
不幸的是,.DS_STORE
等点文件可能会传递给上传者。我尝试添加明确的白名单以仅允许我知道的图像格式,但这没有帮助。
def extension_whitelist
%w(jpg jpeg gif png)
end
还尝试 运行 所有文件通过正则表达式并且只允许匹配
def extension_whitelist
[/^[^\.].*$/]
end
这也没有用。
添加黑名单也无济于事
def extension_blacklist
%w(.ds_store .DS_STORE ds_store DS_STORE)
end
这是我的模型
class LocalImage < ActiveRecord::Base
mount_uploader :image_file, ImageUploader
process_in_background :image_file
validates_integrity_of :image_file
end
这是有问题的上传者
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
include ::CarrierWave::Backgrounder::Delay
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
我添加了 backlist/whitelist 定义并对其进行了全面测试(在两者之间重新启动服务器以确保没有缓存问题)。还通过控制台进行了测试,但模型始终为 valid
,并且在 create!
ing 时不会抛出错误。
path = "path_to_file/.DS_STORE"
File.exists?(path) # => true
local_image = LocalImage.new(image_file: File.open(path, 'rb'))
local_image.valid? # => true
local_image.save! # => true
LocalImage.create!(image_file: File.open(path, 'rb'))
# => <LocalImage id: 22325, code: nil, image_id: nil, image_file: ".DS_STORE", created_at: "2018-02-02 11:19:25", updated_at: "2018-02-02 11:19:25", import_filename: ".ds_store">
运行
- Rails 4.2.0
- 载波 0.10.0
- carrierwave_backgrounder 0.4.2
- mini_magick 4.4.0
如前所述here方法extension_whitelist
仅从0.11版本开始存在,所以我使用的版本还没有这个变化。
我可以通过将 carrierwave
升级到 0.11 或将我的 extension_whitelist
重命名为 extension_white_list
来修复验证。 (与 blacklist -> black_list
相同)。
我想允许通过载波上传器上传(所有可能的)图像文件。
不幸的是,.DS_STORE
等点文件可能会传递给上传者。我尝试添加明确的白名单以仅允许我知道的图像格式,但这没有帮助。
def extension_whitelist
%w(jpg jpeg gif png)
end
还尝试 运行 所有文件通过正则表达式并且只允许匹配
def extension_whitelist
[/^[^\.].*$/]
end
这也没有用。 添加黑名单也无济于事
def extension_blacklist
%w(.ds_store .DS_STORE ds_store DS_STORE)
end
这是我的模型
class LocalImage < ActiveRecord::Base
mount_uploader :image_file, ImageUploader
process_in_background :image_file
validates_integrity_of :image_file
end
这是有问题的上传者
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
include ::CarrierWave::Backgrounder::Delay
storage :file
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
我添加了 backlist/whitelist 定义并对其进行了全面测试(在两者之间重新启动服务器以确保没有缓存问题)。还通过控制台进行了测试,但模型始终为 valid
,并且在 create!
ing 时不会抛出错误。
path = "path_to_file/.DS_STORE"
File.exists?(path) # => true
local_image = LocalImage.new(image_file: File.open(path, 'rb'))
local_image.valid? # => true
local_image.save! # => true
LocalImage.create!(image_file: File.open(path, 'rb'))
# => <LocalImage id: 22325, code: nil, image_id: nil, image_file: ".DS_STORE", created_at: "2018-02-02 11:19:25", updated_at: "2018-02-02 11:19:25", import_filename: ".ds_store">
运行
- Rails 4.2.0
- 载波 0.10.0
- carrierwave_backgrounder 0.4.2
- mini_magick 4.4.0
如前所述here方法extension_whitelist
仅从0.11版本开始存在,所以我使用的版本还没有这个变化。
我可以通过将 carrierwave
升级到 0.11 或将我的 extension_whitelist
重命名为 extension_white_list
来修复验证。 (与 blacklist -> black_list
相同)。