CarrierWave 和正确的文件扩展名取决于其内容

2023-11-29

如何使 CarrierWave 根据文件名添加正确的扩展名 其内容?例如,如果我上传文件“logo”(PNG文件 不带扩展名)CarrierWave 应将其保存为“logo.png”。文件“img.gif”(扩展名不正确的JPG文件)应分别保存为“img.jpg”。


您可以执行以下几项操作,具体取决于您是否使用process or version去做这个。

如果它是一个版本,Carrierwave wiki 有一种方法可以做条件版本。https://github.com/jnicklas/rierwave/wiki/How-to%3A-Do-conditional-processing

version :big, :if => :png? do
  process ...
end

protected
def png?(new_file)
  new_file.content_type.include? 'png'
end

如果您正在使用process方法,你可能想看看这个:https://gist.github.com/995663.

将这些添加到您的代码中以绕过以下限制process has

# create a new "process_extensions" method.  It is like "process", except
# it takes an array of extensions as the first parameter, and registers
# a trampoline method which checks the extension before invocation
def self.process_extensions(*args)
  extensions = args.shift
  args.each do |arg|
    if arg.is_a?(Hash)
      arg.each do |method, args|
        processors.push([:process_trampoline, [extensions, method, args]])
      end
    else
      processors.push([:process_trampoline, [extensions, arg, []]])
    end
  end
end

# our trampoline method which only performs processing if the extension matches
def process_trampoline(extensions, method, args)
  extension = File.extname(original_filename).downcase
  extension = extension[1..-1] if extension[0,1] == '.'
  self.send(method, *args) if extensions.include?(extension)
end

然后,您可以使用它来调用以前的进程,有选择地针对每种文件类型

PNG = %w(png)
JPG = %w(jpg jpeg)
GIF = %w(gif)
def extension_white_list
  PNG + JPG + GIF
end

process_extensions PNG, :resize_to_fit => [1024, 768]
process_extensions JPG, :... 
process_extensions GIF, :...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CarrierWave 和正确的文件扩展名取决于其内容 的相关文章

  • 在运行时在 Rails 中向模型添加列(无需附加表)

    我试图让我的网络应用程序的管理员能够向模型添加一些新字段 该模型称为 Artwork 我想在运行时添加一个 test column 列 我只是在测试 所以我添加了一个简单的链接来做到这一点 它当然是参数化的 我设法通过迁移来做到这一点 de
  • 在 Ruby 中,如何指定另一个目录中的文件作为输入?

    这可能有一个简单的答案 但我正在开发一个测试套件 它需要位于不同文件夹中的输入文件 我想使用相对路径 如下所示 graph Graph new lib test input txt 但鲁比不喜欢这样 使用这样的相对文件路径的最佳方法是什么
  • 在 Rails 4 中使用 AJAX 进行搜索、排序和分页

    我正在尝试进行实时搜索导轨4 0 1应用 我用的是Railscasts 240 教程 http railscasts com episodes 240 search sort paginate with ajax view asciicas
  • Rails 设计 edit_user_password_path

    我无法路由到项目上的 edit user password path 它只是路由到家 有人可以帮忙吗 这个问题的答案很能说明问题 显示设备编辑密码屏幕 https stackoverflow com questions 7014966 sh
  • 耙子的目的是什么?

    我知道 Rake 代表 Ruby Make 而且我知道 Make 是一个 Unix 构建实用程序 现在 我来自 Xcode 工作 将 iPhone 应用程序构建到 Ruby 所以我以前从未使用过 Make 我唯一使用 rake 的时候是在
  • Ruby 字符串上的扫描和匹配有什么区别

    我是 Ruby 新手 并且一直使用String scan搜索某个数字第一次出现的位置 返回值在嵌套数组中有点奇怪 但我只是去了 0 0 为了我想要的价值观 我确信它有它的用途 只是我还没有使用它 我刚刚发现有一个String match方法
  • Bootstrap Typeahead 仅显示第一个字母

    我很难让 Twitter Bootstrap 的 Typeahead 正常工作 Typeahead 仅匹配输入的第一个字母 我在预输入框中的结果看起来像 n n n N N n 我的代码是 有人可以帮忙吗 检查 html 中输出的数据源属性
  • 为什么将 Backbone.js 与 Rails 结合使用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 Nokogiri 漂亮地打印 HTML?

    我用 Ruby 编写了一个网络爬虫 并且正在使用Nokogiri HTML来解析页面 我需要打印该页面 在 IRB 中闲逛时 我注意到一个pretty print方法 然而它需要一个参数 我不知道它想要什么 我的爬虫正在缓存网页的 HTML
  • Rails Active Model Serializer - has_many 并访问父记录

    我正在尝试使用 Active Model Serializer 构建一些 Rails 模型的 JSON 表示 其中一些模型嵌入了其他模型 例如 我有活动和参加者 活动 has and belongs to many 参加者 class Ev
  • 如何在 test/fixtures/user.yml 中创建可用于 Devise 4 中集成测试的测试用户?

    从下面的代码中可以看到 我已经创建了一个用户users yml 包括设备的集成测试助手test helper rb 这就是为什么我能够使用sign in方法 基于设计的自述文件 https github com plataformatec
  • 学习树顶

    我正在尝试自学 Ruby 的 Treetop 语法生成器 我发现 对于 最好的 文档来说 不仅文档非常稀疏 而且它的工作方式似乎并不像我希望的那样直观 从高层次上来说 我真的很喜欢比现场文档或视频更好的教程 如果有的话 在较低的层面上 这是
  • 如何在 Rails ActiveRecord 中的日期指定小于今天的条件

    我正在尝试找出如何提取我的集合中的所有记录的字段publish是真的并且expires比今天少 我有以下内容 但我认为小于部分不起作用 有人可以指出我正确的轨道吗 Announcement where publish true expire
  • Rails、Facebook API、Koala gem — 获取“喜欢”某个页面的用户的所有个人资料

    使用 Rails3 和 koala gem 如何检索 喜欢 FB 页面的用户的所有个人资料 例如 http facebook com DAKINE 有可能吗 作为最终结果 我需要获取一堆存储在数据库中的用户配置文件 Thanks 在 Fac
  • 关于空 own_to 关联的最佳实践

    想象一下以下情况 我有一个dog模型和一个house模型 一只狗可以属于一个房子 一个房子可以有很多只狗 所以 Class Dog lt ActiveRecord Base belongs to house end Class House
  • 没有路线匹配... Rails Engine

    所以我不断收到错误 No route matches action gt create controller gt xaaron api keys 测试中抛出的是 it should not create an api key for th
  • 如何在 Ruby on Rails 中访问控制器中的隐藏字段

    问题 如何访问隐藏字段值post id从文件view comments comment html erb并用在controllers dashboards controller rb 有 2 个控制器 仪表板和评论 并使用gem act a
  • Rails:仅当满足某些条件时如何运行 before_save?

    我有一个 before save 方法 我称之为重命名上传的图像 before save randomize file name def randomize file name extension File extname screen f
  • Rails:统计用户未读通知的数量

    我目前有一个处理用户活动通知系统的活动模型 当发生某些操作 例如创建新文章 时 活动观察者会创建一个新活动 现在我想记录当前用户尚未看到的这些活动通知中有多少 类似于 facebook 上的通知宝石 每次用户单击通知链接时 数字应重置为 0
  • 相当于 JavaScript 中 Ruby 的each_cons

    许多语言都曾提出过这个问题 但 javascript 却没有 Ruby 有方法Enumerable each cons https devdocs io ruby 2 5 enumerable method i each cons看起来像这

随机推荐

  • 未定义的属性: Illuminate\Database\Eloquent\Collection:: Laravel 5.2

    我试图让物联网显示订单中的商品 但我不断收到此错误 这些是我的模型 class westcoorder extends Model protected table westcoorders protected with westcoorde
  • 如何将线程函数的地址作为回调传递给winapi?

    我有一个简单的线程 在执行过程中我尝试使用线程中定义的函数之一的地址调用 EnumWindows 所以我试图这样做 EnumWindows cbEnumWindowsClickOK 0 其中 cbEnumWindowsClickOK 是在线
  • iOS 如何重新启动应用程序以更改语言 Swift 4

    我使用多语言应用程序 我想在配置文件用户中手动更改语言 我已经有 Localization string 如果我更改设备语言 应用程序中的语言将更改为 但我想从用户配置文件示例中手动更改语言 为此 我使用下一个代码 private func
  • 函数返回不可变引用,但借用检查器认为不然

    在这里 我将一些可变引用传递到函数中以对这些引用执行某些操作 然后 我通过将这些可变引用转变为不可变引用来删除它们 然而 Rust 借用检查器似乎仍然认为它们是可变的 这是代码 src lib rs fn append 1 to all s
  • XNA 中非常简单的菜单 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我和其他一些人正在创建一个游戏 我想添加一个非常简单的菜单 只有 开始 和 退出游戏 现在我已经下载了游戏状态管理示例 但这是一个非常长且复杂的代码
  • Py2exe ImportError:没有名为 shell 的模块

    我的代码是 from win32com shell import shellcon from win32com shell shell import ShellExecuteEx 它在 IDLE 中工作正常 但在我生成 exe 后出现错误
  • pip 配置了需要 TLS/SSL 的位置,但是 Python 中的 ssl 模块不可用

    我正在使用Python 3 6 当我尝试使用安装 模块 时pip3 我面临这个问题 pip is configured with locations that require TLS SSL however the ssl module i
  • 如何制作动画信使

    我想创建一个信使组件 当调用该函数时 它将创建一条消息 并且在按下或通过计时器时 首先使其透明 gt 之后 平滑地降低包装器的高度 gt 并且过渡结束后 删除对象 我怎样才能做到这一点 我的代码无法正常工作
  • Rest WebService 错误处理

    我使用 RestWebservice 进行一些基本操作 例如创建 搜索 请求 xml 看起来像这样
  • 矩阵中的最小成本路径

    问题 给定一个充满非负数的 m x n 网格 找到一条从左上角到右下角的路径 该路径最小化沿其路径的所有数字的总和 注意 在任何时间点您只能向下或向右移动 我知道这是一个常见问题 大多数人都知道这个问题及其动态规划 我在这里尝试递归代码 但
  • CSS 在移动浏览器中不起作用

    http mpkosis28 com 28cup 从笔记本电脑或台式机上查看时 该网站看起来很完美 但是当我尝试通过手机访问它时 它无法识别网站中的 css 文件 只加载 html 部分 阅读其他类似的问题 但他们似乎没有和我遇到同样的问题
  • Java String 上哈希码溢出的后果

    我最近在这里阅读了一些有关 Java String 类的哈希码的信息 但我一直无法找到此信息 当字符串的长度高于 32 时会发生什么 我知道会发生溢出 但作为哈希键 会发生什么 例如 我需要对长度在 20 到 120 个字符之间的字符串进行
  • .htaccess 中的 CodeIgniter 查询字符串重写

    当我第一次启动我的网站时 URL 采用以下格式 project php projectID 1 pageID 2 几年前 我修改了 htaccess 以重写它们以使用段 如下所示 project 1 2 我更新了所有内部链接以使用分段格式
  • 删除 Vuetify 中默认的 v-input-file 图标

    v file input是 Vuetify v2 中出现的新组件
  • 以编程方式切换键盘配置文件

    有什么方法可以让我们以编程方式切换已安装的键盘 无需手动进入设置部分 我的要求是向用户展示手机上安装的所有键盘 并获得一个选择器对话框以切换到想要的键盘 基本上我们想减少把他转移到设置页面的步骤 这段代码将满足您的要求 InputMetho
  • 为什么 Heroku 的 heroku-18 堆栈仅与 Puma 版本 3.7.x 兼容?

    通过反复试验 我确定从 Heroku 升级heroku 16堆叠到heroku 18stack 需要我在 Rails 应用程序中更新 Puma 下面是为 puma gem 构建本机扩展的失败 您能解释一下为什么 v3 7 之前的 puma
  • 将 tar/gzip 添加到 Windows 命令行

    正如标题所说 有人知道将 tar gzip 添加到 Windows 命令行的方法吗 我已经安装了 Cygwin 但不知道是否必须在 PATH 环境变量中添加一些内容才能将 tar 作为 cmd 选项 我用来解决这个问题的方法是安装 Cygw
  • 绘制矩形并填充外部边界

    我正在绘制一个矩形 并在矩形外部填充 我尝试了其中一些 但无法得到我所期望的完美的 这正是我所期望的 我试过 Point pTopLeft new Point Point pBotRight new Point pTopLeft x 100
  • PHP 标头重定向到具有时间间隔的多个 URL

    我可以使用 header 重定向到多个具有时间间隔的 URL 吗 假设我有 url1 和 url2 现在 我想要的是标头首先重定向到 url1 然后说 5 秒后 它会将我重定向到 url2 我有办法做到这一点吗 我尝试了下面的简单代码 但这
  • CarrierWave 和正确的文件扩展名取决于其内容

    如何使 CarrierWave 根据文件名添加正确的扩展名 其内容 例如 如果我上传文件 logo PNG文件 不带扩展名 CarrierWave 应将其保存为 logo png 文件 img gif 扩展名不正确的JPG文件 应分别保存为