使用回形针的文件类型的自定义缩略图

2024-01-10

我使用 Paperclip 和 Ruby on Rails 将资产附加到模型,这些资产可以是任何文件类型,并且当前仅当资产是图像时才会生成缩略图。我希望能够为其他文件显示不同的默认图像,可以通过在上传时生成文件的缩略图,或者使用 default_url 设置某些内容,但到目前为止我找不到任何资源来帮助解决此问题我自己一事无成。

我的模型如下:

  class Asset < ActiveRecord::Base  
    has_attached_file :media,  
    :storage => :s3,  
    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",  
    :path => ":attachment/:id/:style.:extension",  
    :bucket => S3_BUCKET,  
    :styles => {:thumb => "75x75>", :large => "600x800>",  
    :whiny => false,  
    :default_url => "/images/:attachment/missing.jpg"  

如果生成失败,是否有人有任何资源可以生成自定义缩略图,或者依靠默认网址中的 :content_type 之类的内容?我已经查看了源代码,但没有找到任何地方。

Thanks!


我实际上已经实现了这个完全相同的功能。 Paperclip 为我的所有图像和 PDF 生成缩略图,并且我为 MS Word、Excel、HTML、TXT 文件等添加了自定义缩略图图标。

我的解决方案相当简单。在我的模型中Attachment(在你的情况下Asset)我定义了以下方法:

def thumbnail_uri(style = :original)
  if style == :original || has_thumbnail?
    attachment.s3.interface.get_link(attachment.s3_bucket.to_s, attachment.path(style), EXPIRES_AFTER)
  else
    generic_icon_path style
  end
end

这将返回存储在 S3 上的缩略图的 URL,或基于资产内容类型的通用 PNG 图标的本地路径(如下所述)。这has_thumbnail?方法确定该资产是否已为其生成缩略图。这是我在我自己的 Paperclip 分支中添加的内容,但您可以用自己的逻辑替换(我不确定确定这一点的“标准”方法,也许将该路径与您定义的“缺失”路径进行比较,甚至只是将内容类型与默认列表[“image/jpeg”、“image/png”]等进行比较。

无论如何,这是根据缩略图样式(在您的情况下为:thumb 和:large)和内容类型将路径传回通用图标的方法:

# Generates a path to the thumbnail image for the given content type 
# and image size.
#
# e.g. a :small thumbnail with a content type of text/html, the file name 
#      would have the filename icon.small.text.html.png
#
# If no such thumbnail can be found a generic one is returned
def generic_icon_path(style = image.default_style)
  url = "/images/attachments/icon.#{style.to_s}.#{attachment_content_type.sub('/', '.')}.png"
  if File.exists? "#{RAILS_ROOT}/public/#{url}"
    url
  else
    "/images/attachments/icon.#{style.to_s}.default.png"
  end
end

然后,要添加新的缩略图,我只需将 PNG 文件添加到/images/attachments/使用正确的文件名约定。我的缩略图样式称为 :small,我已经为 Word、Excel 和纯文本定义了样式,因此目前我有:

icon.small.application.msword.png
icon.small.text.plain.png
icon.small.application.vnd.ms-excel.png
icon.small.application.vnd.openxmlformats-officedocument.spreadsheetml.sheet.png
icon.small.application.vnd.openxmlformats-officedocument.wordprocessingml.document.png

如果不支持该内容类型,则会显示一个通用的“捕获所有”图标:

icon.small.default.png
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用回形针的文件类型的自定义缩略图 的相关文章

  • 从视频创建缩略图 - 提高速度性能 - AVAsset - iPhone [重复]

    这个问题在这里已经有答案了 我正在使用基于以下线程中的代码的代码来生成视频缩略图 从 iPhone SDK 中的视频 URL 或数据获取缩略图 https stackoverflow com questions 1347562 gettin
  • Java - 调整图像大小而不损失质量

    我有 10 000 张照片需要调整大小 因此我有一个 Java 程序来执行此操作 不幸的是 图像的质量损失很大 而且我无法访问未压缩的图像 import java awt Graphics import java awt AlphaComp
  • 设备注册控制器获取零资源的自定义操作

    基本上我想要有两个单独的操作来更改密码和更改电子邮件 而不是只有一个 我已经更新了我的路由以指向继承自 Devise RegistrationsController 的新控制器 我的路线 rb devise for users contro
  • 如何创建与 ActiveResource 对象的 ActiveRecord 关系?

    假设我正在为一家已经拥有 People 应用程序的出版公司编写一个图书馆应用程序 所以在我的图书馆应用程序中我有 class Person lt ActiveResource Base self site http api people m
  • Twitter Bootstrap 中下拉链接的模态

    我正在尝试从下拉菜单中的链接进行模式启动 该模式似乎已启动 网站变为灰色 但看不到 来自不在下拉列表中的常规链接的模态工作得很好 我对 jquery 进行了愚弄 但由于我是 jquery 的新手 所以没有任何结果 这是我的网站代码
  • HABTM 关系和accepts_nested_attributes_for

    我有一个可以让我创建的表单新博客文章我希望能够创造新类别来自同一个表格 我在帖子和类别之间有一个习惯关系 这就是我遇到麻烦的原因 我有以下2个型号 class Post lt ActiveRecord Base has and belong
  • 数据库分片和 Rails

    在 Rails 中处理分片数据库的最佳方法是什么 分片应该在应用层 活动记录层 数据库驱动层 代理层还是其他层处理 各自的优点和缺点是什么 FiveRuns 有一个名为的 gem数据结构 https github com bpot data
  • PHP - 获取base64图像字符串解码并保存为jpg(生成空图像)

    嗨 我实际上是通过 ajax 发送一个 base64 图像字符串到一个 php 脚本 该脚本只是解码字符串并将内容保存为 jpg 文件 但结果是一张空图像 这怎么可能 PHP脚本 uploadedPhotos array photo 1 p
  • Java:ImageIcon 与 Image 的区别

    谁能以菜鸟的方式向我解释一下两者之间有什么区别图像图标 and ImageJava 中的类 对象 谢谢 它们的性质和应用是不同的 Image http docs oracle com javase 6 docs api java awt I
  • Ruby on Rails 3 - 为每个请求重新加载 lib 目录

    我正在为 Rails 3 应用程序创建一个新引擎 正如您所猜测的 该引擎位于我的应用程序的 lib 目录中 但是 我在开发它时遇到了一些问题 事实上 每次更改引擎中的某些内容时 我都需要重新启动服务器 有办法避免这种情况吗 我可以强制rai
  • 如何从rails控制台将数据添加到数据库

    我有一个User model gt gt u User new gt
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 通过 ESI:include 设置 Cookie,如何?

    我正在尝试使用 esi 在我的网站上创建忍者缓存 这个想法是 该网站大部分是静态的 我只需要在用户是否登录时做一些花哨的事情 所以我试图在页面A上放置一个 并在页面B的应用程序中设置触发器 这样我就可以将页面 A 缓存在 varnish 上
  • 在 ActiveAdmin 或打印解决方案中动态更改分页

    我是 Activeadmin 和 Rails 的新手 我需要一些帮助 我有一个分页模型 我想允许用户更改分页值或完全禁用它 这样它就可以打印 到打印机 所有记录 或过滤后的记录 我知道我可以在 before filter 中使用 per p
  • Rails 3.1 和图像资源

    我已将管理主题的所有图像放入名为 admin 的文件夹内的资产文件夹中 然后我像平常一样链接到它 Ruby image tag admin file jpg CSS logo background url assets images adm
  • flutter应用程序中有图像编辑器的api吗?我需要在图像中添加文本

    是否可以编辑图像 例如旋转以及在图像上添加文本 有没有什么插件可以做到这一点 我需要一个图像编辑器来添加具有各种字体和颜色的文本 谢谢 你应该使用重画边界 https docs flutter io flutter widgets Repa
  • Rails - 安装 Spree 时出现问题

    我在 Rails 应用程序中安装 Spree 时遇到问题 当我运行 gem spree 时 按照说明http spreecommerce com documentation getting started html http spreeco
  • Rails 4 和 Turbolinks - 元标签未更改

    我有一个启用了 Turbo Links 的 Rails 4 应用程序 但在更改页面时无法刷新元标记 不是完全刷新 我读到元标记需要包含在加载涡轮链接的 JavaScript 之前 但它没有效果 完全刷新可以完成这项工作 但不幸的是这不是我所
  • puma systemd 脚本无法启动 puma

    我已经从多个来源复制并粘贴了以下美洲狮系统启动脚本的片段 但它不起作用 系统是Debian 9 6 用户rails红宝石通过安装rvm 用户rails可以启动命令RAILS ENV production bundle exec puma C
  • 使用 Passenger + Apache 相对于 Webrick 的优势

    我想说服我的管理层 使用 Apache 乘客设置是继续生产的方法 而不是使用 webrick 或 mongrel 我从网上找到了一些观点 如果您能添加您的想法 那将非常有帮助 因为这将有力地帮助我表达我的观点 欢迎提供技术细节 如果您有任何

随机推荐

  • BackboneJS 重新排列集合中模型的最佳方法,同时维护每个模型的 0 索引序数属性

    我在这里遇到一个问题 我有一个 BackboneJS 模型的集合 每个模型都有一个 序数 属性来跟踪其在集合中的顺序 这是我的播放数据 var ex group test data title PRE EXERCISE id 0 ordin
  • 使用 Python TKinter / imageTK 在屏幕上的图像之间淡入淡出

    我是一个Python新手 一直在制作一个有点奇怪的幻灯片脚本 该脚本循环显示图像 并且还从另一个文件中获取变量以 解决 图像 我确信我的代码是悲剧性的 但它确实有效 见下文 我的问题是 如何让它在图像之间淡出 而不是暂时变成白色 然后转到当
  • OutlinedTextField 不会在 Compose 中调整为最小宽度

    我试图使 OutlinedTextField 见下图 充当 wrap content 理想的情况是它足够大以适合内部文本500g如果用户编辑该字段 则展开和收缩 如果我没记错的话 这可以通过 非 Compose ConstraintLayo
  • 如何使 Observable 在 1 秒的时间间隔后发出字符

    我刚刚开始使用 RxJava android 为了练习和入门 我想让 observable 每 1 秒发出字符串中的字符 我该怎么做 这是我到目前为止所尝试过的 它只是立即发出字符串 Observable
  • jQuery Cycle 插件 - 暂停/恢复奇怪的行为

    我有一个使用很棒的循环插件运行的幻灯片 当您单击演示中的按钮时 我会在页面上显示一个隐藏层并发送 暂停 命令来循环 我有两个问题 当收到暂停命令时 循环立即翻转回序列中的第一张幻灯片 为什么 并且不会触发我的之前 之后回调 关闭图层后 我发
  • 正则表达式用于 [] 之间的任何内容

    我需要找到 的正则表达式 例如 如果字符串是 Hi Stack 这是我需要 Find 的 Tag 它应该返回 堆栈 标记 查找 非常简单 您只需要 1 用反斜杠转义括号 2 使用 捕获内容 括号是一个捕获组 它们捕获其内容以供以后使用 后面
  • 如何通过复制上一行来动态创建新行

    我有一个如下所示的数据框 编辑后的数据框 df pd DataFrame subject id 1 1 1 1 1 1 1 2 2 2 2 2 time 1 2173 04 03 12 35 00 2173 04 03 12 50 00 2
  • Android Intent.ACTION_VIEW

    我需要用户选择自己的播放器来播放视频 我尝试 public class VideoViewActivity extends Activity Override public void onCreate Bundle savedInstanc
  • 比较名称之间的相似度

    我必须根据名称对一些数据进行交叉验证 我面临的问题是 根据来源 名称略有不同 例如 L L AIR CONDITIONING vs L L AIR CONDITIONING Service BEST ROOFING vs ROOFING I
  • 处理异常的示例代码

    我是 Android 移动应用程序开发新手 我想知道如何处理异常HttpConnection相关异常或任何其他异常 我需要显示一个AlertDialog给用户 请提供示例代码或项目源代码以了解我如何处理HttpConnection或类似类型
  • 在 iPhone 应用程序中显示 HTML

    如何在 iPhone 的 textview 中打开 url 是否可以显示数据links photos和所有html entities 您可以使用 UIWebView 从文件加载静态包含 html 照片 css javascript NSSt
  • 将大字符串写入文件的最佳方法

    在 C 中 我正在读取中等大小的文件 100 KB 1 MB 修改部分内容 最后写入不同的文件 所有内容均为文字 修改是作为字符串对象和字符串操作完成的 我目前的做法是 使用以下命令读取原始文件中的每一行StreamReader Open
  • Firefox 拖动 div 就像拖动图像一样

    我正在使用以下 HTML CSS 和 Javascript 代码 如果您想测试的话 可以将其放在一个文档中
  • 从数据框中删除控制字符空格

    我有一个数据框 df 通过它我可以使用它来获取列表列表 data list map str n tolist for n in df values 之后我从这样的数据中替换特定的控制字符 data e replace u xa0 u for
  • SignalR WebSockets 在本地工作但不在服务器上工作

    我正在尝试让 Web Sockets 作为使用 SignalR 2 4 2 的 ASP NET 4 8 Framework 应用程序的协议 它可以在本地主机上运行 Windows 10 Pro 的 Visual Studio 2019 上正
  • 将点投影到平面上的投影矩阵

    如何确定 4x4S矩阵 以便 P 在 XZ Y 0 平面上投影到 Q 中 Q S P 射线有坐标r t L t P L 这是组件形式 r x L x t P x L x r y L y t P y L y r z L z t P z L z
  • Get-TfsItemHistory 版本参数

    我想要一种方法来从特定日期的 TFS 中查找一组不同的更改文件 通过谷歌搜索我找到了这篇文章 http blog hackedbrain com 2009 04 01 getting a distinct list of changed f
  • 我们如何使用opencart事件?

    我搜索了很多有关 opencart 触发器的信息 但没有找到合适的示例 在 opencart 2 0 中 有一些触发器 开发人员可以挂钩函数并执行一些事情 就像我猜的 wordpress 操作和过滤器一样 例如在 catalog model
  • vuetify.js 如何获取 v-container 的全宽

    我是新来的vuetify js并开始摆弄它 这是我的代码 管理面板 vue
  • 使用回形针的文件类型的自定义缩略图

    我使用 Paperclip 和 Ruby on Rails 将资产附加到模型 这些资产可以是任何文件类型 并且当前仅当资产是图像时才会生成缩略图 我希望能够为其他文件显示不同的默认图像 可以通过在上传时生成文件的缩略图 或者使用 defau