【问题标题】:rails - Paperclip file namerails - 回形针文件名
【发布时间】:2010-11-29 18:21:38
【问题描述】:

使用带有 Paperclip 的 rails,我可以在 before_create 期间使用以下内容来获取文件名:

extension = File.extname(photo_file_name).downcase

我如何获得文件名.. 现在我有 photo_file_name,它提供了整个文件,titlename.pdf

我只需要没有 .pdf 的标题名

谢谢

用代码更新:

照片.rb:

  before_create :obfuscate_file_name

  #Paperclip for photo
  has_attached_file :photo,
......


private

  def obfuscate_file_name
    extension = File.extname(photo_file_name).downcase
    fileNameOnly = File.basename(photo_file_name).downcase
    self.photo.instance_write(:file_name, "#{fileNameOnly}_#{ActiveSupport::SecureRandom.hex(32)}#{extension}")
  end

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 paperclip


    【解决方案1】:

    File.basename 与可选的suffix 参数一起使用,如下所示:

    file_name = File.basename(photo_file_name, File.extname(photo_file_name));
    

    在我的机器上工作:

    【讨论】:

    • Stackoverflow 让你等待 6 分钟。
    【解决方案2】:

    回形针附件有 'original_filename' 方法。

    【讨论】:

    • 我不确定这会满足 OP 的需求。他们想要a_file,而不是a_file.pdf
    • 似乎这个问题的标题可能不够具体。人们可能会来这里搜索“回形针文件名”,并找到这个答案,这是该问题的正确答案,因此即使这不是该问题的 OP 所要求的,他们也会投票赞成。
    【解决方案3】:
    user.logo.original_filename
      => 'test.jpg'
    

    【讨论】:

      【解决方案4】:

      另一个选项设置为默认值,适用于所有上传。

      此示例将名称文件更改为 web 的“名称默认值”,例如:test áé.jpgtest_ae_www.foo.com.jpg

      helper/application_helper.rb

      def sanitize_filename(filename)
          fn = filename.split /(?<=.)\.(?=[^.])(?!.*\.[^.])/m
          fn[0] = fn[0].parameterize
          return fn.join '.'
      end
      

      创建config/initializers/paperclip_defaults.rb

      include ApplicationHelper
      
      Paperclip::Attachment.default_options.update({
          :path => ":rails_root/public/system/:class/:attachment/:id/:style/:parameterize_file_name",
          :url => "/system/:class/:attachment/:id/:style/:parameterize_file_name",
      })
      
      Paperclip.interpolates :parameterize_file_name do |attachment, style|
          "#{sanitize_filename(attachment.original_filename)}_www.foo.com"
      end
      

      输入这段代码后需要重启

      希望对你有帮助! ;)

      【讨论】:

        猜你喜欢
        • 2018-07-16
        • 1970-01-01
        • 2011-12-05
        • 1970-01-01
        • 2019-05-14
        • 1970-01-01
        • 2010-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多