zoukankan      html  css  js  c++  java
  • paperclip自定制文件名

    2010-07-02

    paperclip定制文件名

    文章分类:Ruby编程
    在新项目中使用了paperclip这个文件上传插件,一切都很满意,但是对于它不能自定义文件名就比较郁闷了,一直想实现这个功能,不过一直没时间去看paperclip的源代码(其实因为懒)。

    我说的自定义文件名,不是网上多数教程所说的修改文件存储的文件夹路径,打个比方,我上传了一个叫做 test.gif 的文件,服务器上存储的文件的文件名同样是 test.gif ,而我希望是系统随机地指定一个文件名给上传的文件,我希望在服务器上存储的文件名不是原来的 test.gif,而是 2010070100000.gif 这种由我指定的文件,这样可以统一文件,防止用户上传的文件是一些乱七八糟的名字,而且我们的项目面向中英文用户,当然是不希望英文用户看到一些中文名字 的文件。

    废话说完,上代码。
    这个代码不是我写的,在网上看到的,原文链接 http://trevorturk.com/2009/03/22/randomize-filename-in-paperclip/

    在需要上传文件的model中加入如下代码:
    Ruby代码
    1. before_create :randomize_file_name  
    2.   
    3.   private  
    4.   def randomize_file_name  
    5.     #archives 就是你在 has_attached_file :archives 使用的名字  
    6.     extension = File.extname(archives_file_name).downcase  
    7.    #你可以改成你想要的文件名,把下面这个方法的第二个参数随便改了就可以了。  
    8.     self.archives.instance_write(:file_name"#{Time.now.strftime("%Y%m%d%H%M%S")}#{rand(1000)}#{extension}")  
    9.   end  


    代码一目了然,原理就是在保存之前,先把文件名给改了,简单直接。

    paperclip 这个文件上传插件比起 file_column要好用得多,而且 file_column 已经多年没有更新了,推荐大家使用 paperclip。

    另外,如果你使用jQuery的话,配合 jQuery Multiple File Upload Plugin 这个插件,相当的好用。 http://www.fyneworks.com/jquery

  • 相关阅读:
    主线程和子线程的区别
    正则表达式 之 常用实例
    Asp.Net 之 未能加载文件或程序集 system.web.extensions 解决方法
    .Net 与 Java 的服务接口相互调用
    C# 之 SqlConnection 类
    ADO.Net 之 数据库连接池(一)
    C# 之 DataReader 和 DataSet 的区别
    Asp.Net 之 缓存机制
    IIS 之 失败请求跟踪规则
    IIS 之 HTTP错误信息提示
  • 原文地址:https://www.cnblogs.com/lexus/p/1907693.html
Copyright © 2011-2022 走看看