Tag: filenames

CarrierWave:为所有版本化文件创建相同的唯一文件名

在我详细介绍之前,我会明确指出:有没有人想出办法让Carrierwave保存文件,其名称为时间戳或每个文件唯一的任意字符串? 默认情况下,Carrierwave将每个文件及其备用版本保存在自己的目录中(以型号ID号命名)。 我不喜欢这个,因为为了使用一个大的圆形数字而不是一个1000的目录,文件(在我的情况下是图片)中我们得到一个目录,其中有1,000个子目录,每个子目录有一个或两个文件。 呸。 现在,当您覆盖Uploader的store_dir方法时,如下所示: def store_dir “uploads/#{model.class.to_s.underscore}/#{mounted_as}” end 你最终得到了我想要的确切行为。 所有文件(图片)都进入一个大的快乐文件夹。 删除对象时不再有子文件夹。 只有一个问题。 文件冲突。 如果你上传了delicious_cake.jpg两次,那么即使它们是美味蛋糕的两张不同的照片,它也会覆盖第一个! 这显然是为什么store_dir方法在它返回的值的末尾增加了额外的/#{model.id} 。 那么该怎么办? 在阅读了一下后,我发现在生成的上传器文件中有一个明显的解决方案被注释掉了。 # Override the filename of the uploaded files: # Avoid using model.id or version_name here, see uploader/store.rb for details. # def filename # “something.jpg” if original_filename # end 经过一番搜索,我找到了一个做过以下事情的人 def filename @name ||= “#{secure_token}.#{file.extension}” if original_filename […]