使用CarrierWave上传图片时,多版本文件名的统一
第一次使用CarrierWavewe做上传,不能不说,虽然Rails已经把上传变得超简单了,而CarrierWave则是把上传变成了一种享受,特别是做图片上传,现在这年代,图片展示平台已经不仅仅是电脑了,各移动端也是必须要兼顾的,这导致了上传的图片,一般都需要有好几个版本大小,如果还纯手工的使用RMagick之类慢慢处理的话,实在是有点郁闷,而CarrierWave配上MiniMagick,一个version搞定一切,真的是感觉“倍儿爽”。
不过在使用过程中,也发现了几个小问题,最主要的就是,就是当存在多个图片大小版本时,生成的文件名不一致的情况。CarrierWave本身生成文件名是使用时间戳的,但是当存在多个版本时,第一个版本,它都会启动一个新实例,这导致生成的文件名,时间上会不一样,也就导致了了最终的文件名不一样。
网上搜索了一下,比较好和方便的是大牛李华顺的方法,利用临时文件路径中的时间戳来做MD5,得到一致的文件名。不过我这次要求的文件名格式不一样,要求如下:
用户ID_时间_随机数.后缀
经过多次尝试,用了一个不怎么漂亮的方式实现了
class ShopImgUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick process :resize_to_fit =>[500,500] version :thumb do
process :resize_to_fill => [200,200]
end #关键,添加一个方法,直接设置文件名
#我这里的p就是用户ID,而加上name是因为每个新的version都会启动一个新实例
#新实例中,是没有@name的,所以我们在生成文件名的时候,强制调用一下
def set_prefix p,name=nil
@prefix = p
if name.nil?
@name = "#{@prefix}_#{Time.now.strftime '%Y%m%d%H%M%S%L'}_#{rand(1..100)}"
else
@name = name
end
end #生成文件名规则
def filename
#只有原始文件实例的时候@versions才不为空,所以不会重复调用
unless @versions.nil?
@versions.each do |version,obj|
#很粗暴的直接指定名称,各版本会在名称前加上版本前缀,比如thumb_
obj.set_prefix(@prefix, @name)
end
end
"#{@name}.#{file.extension}"
end end
使用CarrierWave上传图片时,多版本文件名的统一的更多相关文章
- 调试台自动多出现一个'' ,我 用uploadify上传图片时,在给页面写入一个返回值为图片名称的变量的值的时候值的前面始终多出现一个''
对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香! 15:54 2016/3/12用uploadify上传图片时,在给页面写入一个返回值为图片名称的变量的值的时候值的前面始终多出现一个' ...
- wordpress上传图片时重命名--修改插件时遇到的一些问题
wordpress是用php语言开发的博客平台,它扩展性强,容易扩展,很适合拿来做二次开发. 1,问题由来 本周五,我在浏览公司的网站(基于wordpress开发)时发现,网站首页上有两篇文章的缩略图 ...
- 前端AntD框架的upload组件上传图片时遇到的一些坑
前言 本次做后台管理系统,采用的是 AntD 框架.涉及到图片的上传,用的是AntD的 upload 组件. 前端做文件上传这个功能,是很有技术难度的.既然框架给我们提供好了,那就直接用呗.结果用的时 ...
- 使用uploadify上传图片时返回“Cannot read property 'queueData' of undefined”
在使用uploadify插件上传图片时,遇到一个比较坑的错误:上传时提示“Cannot read property 'queueData' of undefined”. 遇到这个问题有点无语,因为这个 ...
- AntD框架的upload组件上传图片时使用customRequest方法自定义上传行为
本次做后台管理系统,采用的是 AntD 框架.涉及到图片的上传,用的是AntD的 upload 组件. 我在上一篇文章<AntD框架的upload组件上传图片时使用customRequest方法 ...
- 关于 百度 Ueditor 上传图片时 打开文件夹的延迟问题
在使用 ueditor 开发时, 作为一个web文本编辑器使用时. 当点击上传图片时, 文件夹要延迟好久才能打开. 解决: 针对多图片上传, 将/ueditor/dialogs/image/image ...
- 让win7安装时出现版本选项
win7有几种版本,win7旗舰版包含各大版本,修改一下ISO,让安装时出现版本选项窗口: 1.准备好一个官方win7旗舰版安装包IOS光盘镜像. 2.用UltraISO打开光盘镜像并删除source ...
- Web Uploader初始化隐藏容器失败及点击上传图片时反应较慢的问题
问题1:在一个页面集成一个或者多个文件上传插件,初始化时有些DOM容器是隐藏的,这时候经常会出现初始化失败的情况,虽然按钮样式改变了,但是点击就是没反应(有时候不经意点了哪个地方,或许会出现文件选择框 ...
- Lua热更新时正确设置文件名
Lua热更新时正确设置文件名(金庆的专栏 2016.12)Lua热更新模块见:https://github.com/jinq0123/hotfix其中使用 load(chunk) 来加载更新后的内容, ...
随机推荐
- EJBCA认证系统结构及相关介绍
写作此文的主要目的是记录下EJBCA认证系统的系统结构及相关部件作用的介绍,方便后面查阅使用.
- 由RGB到HSV颜色空间的理解
1. RGB模型 2. HSV模型 3. 如何理解RGB与HSV的联系 4. HSV在图像处理中的应用 5. opencv中RGB-->HSV实现 在图像处理中,最常用的颜色空间是RGB模型,常 ...
- iOS 导航条的影响
如果是push出来的控制器,self.view的(0,0)点从状态栏下面开始: 如果有present出来的控制器,self.view的(0,0)点包含状态栏:
- C# 如何从List集合当中取出子集合
今天项目要求随机从数据库中随机取出若干条数据,放到首页.那么要如何随机取出这个子集合呢?本人向到的方法如下: 1.假设数据量很少,如我数据库中只有10条数据,而我要求随机取出8条.对于这种低数据量,大 ...
- jsf小例子
有人问我用过jsf没? 当时没有用过,就看了一下: 写了一个小例子 JSF和struts2 差不多的,都有一些配置和跳转 struts2的action配置和JSF的faces-config.xm ...
- WinSock网络编程基础(3)server
上一篇讲的是简单的发送数据的客户端的实现.接下来讲的是如何实现收发数据服务器.这里说的服务器其实就是一个进程,它需要等待任意数量的客户端与之建立起连接,以便响应它们的请求. 服务器必须在已知的名称上监 ...
- BZOJ 1876: [SDOI2009]SuperGCD( 更相减损 + 高精度 )
更相减损,要用高精度.... --------------------------------------------------------------- #include<cstdio> ...
- Mongodb安装和基本命令
本人是在Centos中安装的mongodb 1.下载mongodb curl -O http://downloads.mongodb.org/linux/mongodb-linux-x86_64-2. ...
- javascript --推箱子
<head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" ...
- linux系统性能监控常用命令
一.Linux服务器性能关注点 1)CPU -> load:表示cpu在一段时间内正在处理以及等待处理的任务之和统计信息,简单可理解为cpu正处理的线程数和能同时处理的线程数的比值.一般认为 ...