新手问题 上传文件,用什么做为文件名好

metal · 2012年09月18日 · 最后由 xmonkeycn 回复于 2012年09月19日 · 3600 次阅读

用过原文件名。用过日期Time.now.to_i蛋疼的方法。

现在用object_id,不知道会有什么弊端,产生重复的可能性有多少。

用日期挺好的啊,加多几个随机字符,重复可能性极低

那直接用你上传后的东西 MD5 吧

用数据库的自增 id 啊

def store_dir "#{Setting.attachments_path}/#{model.assetable_type.underscore}/#{Digest::MD5.hexdigest(model.assetable_id.to_s)[0..2]}" end

def filename if super.present? # current_path 是 Carrierwave 上传过程临时创建的一个文件,有时间标记,所以它将是唯一的 @name ||= Digest::MD5.hexdigest(File.dirname(current_path)) "#{@name}.#{file.extension.downcase}" end end

我这的设置,其实 filename 就是 rubychina 的方法,store_dir 对 id 取 md5 前三位避免单目录文件数量过多对性能有影响

话说 carrierwave 有个 bug mount_as 的模型的命名空间超过 1 层,cache 会失效

#4 楼 @jasl Ruby China 这样设定是因为 UpYun 的存储结构不是纯粹的文件系统,它的内部是有处理分目录的。所有这里就不需要再分了。

可以看看 @huacnlee 的 blog,写的很好。 Carrierwave 如何配置合理的上传文件名 http://huacnlee.com/blog/carrierwave-upload-store-file-name-config/

需要 登录 后方可回复, 如果你还没有账号请 注册新账号