回形针:从带扩展名的 url 上传

2024-05-27

我想通过 S3 存储上的回形针从 URL 上传图片。 我与:

Ruby 1.9.3
Rails 3.2.6
paperclip 3.1.3
aws-sdk 1.3.9

我有我的图片模型:

class Asset

  has_attached_file :asset,
    :styles => {:thumb => "60x60>"},
    :storage => :s3,
    :s3_credentials => "#{Rails.root}/config/s3.yml",
    :path => "/pictures/:id/:style.:extension"

  validates_attachment_content_type :asset, :content_type => ['image/gif', 'image/jpeg', 'image/png', 'image/x-ms-bmp']

end 

所以基本上我这样做是为了从 URL 下载我的文件:

picture = Asset.new(asset: open("http://www.my_url.com/my_picture.jpg"))
picture.save

但它用错误的 file_name 保存我的文件,并且没有设置文件的扩展名:

#<Asset id: 5, asset_file_name: "open-uri20120717-6028-1k3f7xz", asset_content_type: "image/jpeg", asset_update_at: nil, asset_file_size: 91565, created_at: "2012-07-17 12:41:40", updated_at: "2012-07-17 12:41:40">
p.asset.url
  => http://s3.amazonaws.com/my_assets_path/pictures/5/original.

如您所见,没有扩展名。

我找到了解决这个问题的方法,但我确信我可以有更好的方法。这个解决方案是将文件复制到我的计算机上,然后将其发送到 S3 上,如下所示:

filename = "#{Rails.root}/tmp/my_picture.jpg"
open(filename, 'wb') do |file|
  file << open("http://www.my_url.com/my_picture.jpg").read
end

picture = Asset::Picture.new(asset: open(filename))
picture.save

这在我的电脑上有效:

#<Asset::Picture id: 10, asset_file_name: "my_picture.jpg", asset_content_type: "image/jpeg", asset_update_at: nil, asset_file_size: 91565, created_at: "2012-07-17 12:45:30", updated_at: "2012-07-17 12:45:30">
p.asset.url
  => "http://s3.amazonaws.com/assets.tests/my_assets_path/10/original.jpg"

但是我不知道这个方法是否适用于 Heroku(我在其上托管我的应用程序)。

有没有更好的方法而不通过临时文件?


好时机。我刚刚发送了一个拉取请求,该请求在几个小时前(2012 年 7 月 20 日)已修复,这应该会让您的生活变得非常轻松。

self.asset = URI.parse("http://s3.amazonaws.com/blah/blah/blah.jpg")

这将下载您的 jpeg 图像,确保文件名是 blah.jpg 并且内容类型是“image/jpg”

Paperclip 版本 > 3.1.3(您需要将其链接到 github 存储库,直到它发布)。

更新:确认使用回形针版本 >= 3.1.4

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

回形针:从带扩展名的 url 上传 的相关文章

  • 为什么 rand() 总是返回相同的数字?

    我在用 兰特 200 在我的 Rails 应用程序中 当我在控制台中运行它时 它总是返回随机数 但如果我在应用程序行中使用它 index rand 200 索引总是相同的号码 为什么会这样以及如何克服这个问题 简单的伪随机数生成器实际上生成
  • 将 ruby​​ 类转换为模块比使用改进更好的方法?

    Module refine http ruby doc org core 2 0 0 Module html method i refine方法接受一个类和一个块并返回一个细化模块 所以我想我可以定义 class Class def inc
  • Ruby 的字符串并置功能的官方文档在哪里?

    我最近意识到 如果你并置一系列 Ruby 字符串文字 例如 a b c 它相当于这些字符串文字的串联 但是 我在任何地方都找不到这种语言功能的记录 我使用术语 并置 和 串联 进行搜索 但只在几个 StackOverflow 响应中找到了对
  • 回形针不支持 .doc 文件

    在 Rails 4 0 2 中 我使用回形针 gem 上传文件 但它不支持 doc 文件 在文件上传字段下方 显示一条错误消息 扩展名与其内容不匹配 在模型中 检查内容类型的验证如下 validates attachment content
  • ActiveRecord:向包含的 ON 子句添加条件

    我有一个模型报价和另一个历史报价 一个报价有很多历史报价 现在 我想立即加载一组报价的某一天的历史报价 如果存在 为此 我认为我需要将这一天传递给 ON 子句 而不是 WHERE 子句 以便我获得所有报价 即使在给定日期没有历史报价时也是如
  • 在 ActiveAdmin 或打印解决方案中动态更改分页

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

    我已将管理主题的所有图像放入名为 admin 的文件夹内的资产文件夹中 然后我像平常一样链接到它 Ruby image tag admin file jpg CSS logo background url assets images adm
  • Rails 5:验证复选框的接受

    我有一个带有一些嵌套字段的注册表单 在该表单中我添加了一个服务条款的复选框 我正在尝试验证复选框何时被选中 如果没有 则返回错误 validates acceptance of agreement allow nil gt true acc
  • Rails 从 OrdersController 更新用户模型的属性

    这是我的代码 订单控制器类 def create order Order new params order if order purchase work GATEWAY store credit card options result wo
  • 如何在两个模型之间建立两个 has_many/belongs_to 关系?

    我有一个Project模型 以及一个Contact模型 项目模型有一个所有者和一个客户 两者都是Contacts 显然我遇到了一些不明确的事情 因为如果我有联系人并询问其项目 Rails 将不知道我询问的是它的项目是客户还是所有者 到目前为
  • 两个 ruby​​ 进程之间的通信可能/容易吗?

    如果我有一个 ruby 脚本Daemon顾名思义 它作为守护进程运行 监视系统的某些部分并能够执行需要身份验证的命令 例如更改权限 是否有一种简单的方法来拥有第二个 ruby 脚本 例如client 与该脚本通信并向其发送命令 询问信息 我
  • 为什么||和 或 在 Rails 中的行为有所不同? [复制]

    这个问题在这里已经有答案了 可能的重复 i true 和 false 在 Ruby 中是真的吗 https stackoverflow com questions 2802494 i true and false in ruby is tr
  • 如何在生产服务器中运行 sidekiq?

    我有一个带有apache passenger的服务器 我将如何奔跑sidekiq在生产中 运行所需的任何配置 bundle exec sidekiq Thanks bundle exec sidekiq d L log sidekiq lo
  • 如何使用 Ruby on Rails 3 检查 HTTP 请求的“Content-Length”字段?

    我正在使用 Ruby on Rails 3 在我的视图文件中我有以下代码 为了避免服务器过载 我会在服务器接收上传文件之前检查上传文件的大小 这是因为 按下表单的提交按钮 服务器会先完整接收文件 然后再检查文件 我知道一个HTTP 请求有标
  • Capybara with Rails:如何仅查找不可见元素

    我正在 Rails 项目 Rails 5 2 0 中使用 Capybara capybara 3 1 0 进行系统测试 确保元素不可见的方法是什么 我当时用的是visible false选项 直到我发现它也匹配可见元素 例如我使用 find
  • 为什么我可以像调用实例方法一样调用类方法?

    我正在查看这个例子 class SQLObject def self columns return columns if columns columns DBConnection execute2 lt lt SQL first SELEC
  • Emacs、ruby:将 do 结束块转换为大括号,反之亦然

    我经常发现自己转换这样的代码 before do something end to before something 有没有办法在 emacs 中自动执行此任务 我使用 ruby mode 和 rinary 但它们在这里没有太大帮助 rub
  • Rails - 用于集合集的单选按钮

    我有以下输出选择框 br 替代输出单选按钮的 Rails 方法是什么 对于单选按钮 您必须自行迭代并输出每个单选按钮及其标签 事实上这真的很容易
  • 将 Rack::Deflater 插入机架中的哪个位置?

    我目前有以下内容 use Rack Rewrite use Rack Cache verbose gt true metastore gt memcached localhost 11211 rack cache meta entityst
  • Rails 3 SSL 路由从 https 重定向到 http

    这个问题与此相关SO 问答 rails 3 ssl deprecation https stackoverflow com questions 3634100 rails 3 ssl deprecation建议使用routes rb和类似的

随机推荐

  • TensorFlow 运算符重载

    有什么区别 tf add x y and x y 在 TensorFlow 中 当您使用以下命令构建图表时 您的计算图表会有什么不同 代替tf add 更一般地说 有 或者其他张量超载的操作 如果至少有一个x or y is a tf Te
  • Google Chrome API:如何添加我的应用程序以在“新标签”(应用程序)页面上显示图标?

    我注意到 新选项卡 页面有一个应用程序部分 但默认情况下不在那里添加应用程序 我需要做什么才能让我的申请出现在那里 托管应用程序和打包应用程序 http code google com chrome webstore docs choosi
  • PostgreSQL:42883 运算符不存在:没有时区的时间戳 = 文本

    我正在使用 Npgsql 3 0 3 0 和 PetaPoco 最新版本 当我运行这个命令时 var dateCreated DateTime Now just an example var sql new Sql WHERE date c
  • 匹配字典集。最优雅的解决方案。 Python

    给定两个字典列表 新的和旧的 字典在两个列表中表示相同的对象 我需要找到差异并生成新的字典列表 其中仅包含新字典中的对象和旧字典中的更新属性 例子 list new id 1 name bob desc cool guy id 2 name
  • 复选框选择与 TableView 绑定

    How to bind with TableView selection model with checkbox isSelected in table view In manually using mouse multiple selec
  • 优化 Django Queryset for 循环

    如何优化以下查询集 link goal for link in self child links all 我想摆脱 for 循环并只访问数据库一次 我有以下代码 class Goal models Model name models Cha
  • PhoneGap BarcodeScanner - ClassNotFound

    UPDATE 2 我发布了一个解决我原来问题的答案 看欲了解更多信息 https stackoverflow com a 9541490 398519 UPDATE供任何想知道的人参考 最后我发现了这个 http github com co
  • 在ios键盘上方显示建议工具栏

    我是iOS开发的新手 我正在尝试在 ios 5 1 中创建一个具有 textView 的拼写建议类型应用程序 这样如果用户点击键盘的某个键 则建议工具栏会出现在键盘顶部 其中包含所有建议 并且如果用户点击这些建议之一它将显示在 textVi
  • 如何使子元素被访问/活动时父元素的颜色发生变化

    我有一个下拉导航 我想要做的是 当我单击任何子菜单链接时 我希望父按钮的颜色在链接处于活动状态时保持更改 这是代码的小提琴链接 https jsfiddle net v28ydshL https jsfiddle net v28ydshL
  • Microsoft.Web.Administration 内存泄漏

    拥有一个 Windows 服务 除其他外 还可以监视 IIS 应用程序池 如果任何池已配置应用程序但未运行 则该池 池 将启动 这已经运行良好一段时间了 最近发现该服务存在内存泄漏 查看内存转储 罪魁祸首是用于检查应用程序池的 Micros
  • 运行最新版本时没有“最新”消息?

    我正在尝试使用Sparkle https sparkle project org与 Qt Go 的绑定 https github com therecipe qt app 闪光 m import
  • Xcode 11 向后兼容性:“UIWindowScene 仅在 iOS 13 或更高版本中可用”

    在 Xcode 11 中 我从 Single View App 模板创建了一个新的应用程序项目 我希望这个应用程序能够在 iOS 12 和 iOS 13 中运行 但是当我将部署目标切换到 iOS 12 时 我收到了很多类似这样的错误消息 U
  • Django + 后台任务如何初始化

    我有一个基本的 django 项目 用作 Condor 计算集群的前端接口来生成模拟 用户可以从 django 应用程序开始模拟 在 Condor 中 与仿真相关的元数据和仿真状态保存在数据库中 我需要添加一个新功能 某些 模拟完成时发出通
  • 区分 Mifare Ultralight 和 Mifare Ultralight C

    有没有可靠的方法来确定 RFID 卡是 Mifare Ultralight 还是 Mifare Ultralight C 到目前为止 我发现的唯一方法是利用这两张卡的大小差异 发出超出较小卡边界的读取命令 但它看起来确实像黑客攻击 我认为如
  • shutdown.exe 参数带有破折号或斜杠?

    我使用的电话shutdown exe重新启动安装了不同版本 Windows 的计算机 对于 Windows XP 命令是 shutdown exe r f t 01 对于其他版本的 Windows 我使用 shutdown exe L R
  • 内存泄漏在哪里?

    我使用 InetAddress 来解析 IP 地址 但现在如果 IP 不可用 则需要存储主机名 所以我介绍了一个班级Host case class Host name String ip InetAddress import Host ad
  • unique_ptr需要存储删除器怎么可能没有开销呢?

    先看看C Primer讲了什么unique ptr and shared ptr 16 1 6 美元 效率和灵活性 我们可以确定的是shared ptr不将删除者视为直接成员 因为删除器的类型直到运行时才知道 因为删除器的类型是a类型的一部
  • KDB 排除具有空值的行

    我有一个表 其中有一些带有空值的单元格 分散在数据集中 有什么简单的方法可以排除任何列中包含空值的所有行吗 我只是想避免这种情况 select from T where not null col1 not null col2 not nul
  • 关闭模态后清除模态字段

    我有这个模式
  • 回形针:从带扩展名的 url 上传

    我想通过 S3 存储上的回形针从 URL 上传图片 我与 Ruby 1 9 3 Rails 3 2 6 paperclip 3 1 3 aws sdk 1 3 9 我有我的图片模型 class Asset has attached file