我正试图上传一张图片到PingFM.他们的documentation人说:

media – base64 encoded media data.

我可以通过URL访问此图像.我试过(几乎猜到了):

ActiveSupport::Base64.encode64(open("http://image.com/img.jpg"))

但我有一个错误:

TypeError: can't convert Tempfile into String
    from /usr/lib/ruby/1.8/base64.rb:97:in `pack'
    from /usr/lib/ruby/1.8/base64.rb:97:in `encode64'
    from (irb):19
    from :0

推荐答案

open种方法:

open("http://image.com/img.jpg")

正在返回一个Tempfile对象,而encode64需要一个字符串.

在tempfile上调用read应该可以做到:

ActiveSupport::Base64.encode64(open("http://image.com/img.jpg") { |io| io.read })

Ruby-on-rails相关问答推荐

如何在不触发每次编译的情况下运行`bin/rails测试`?

使用Rails和RSpec,有没有办法查看操作真正将您带到哪个页面?

Ruby on Rails - 外键不匹配

从Rails中的字符串中间提取子字符串

active_storage.resolve_model_to_route的不同值代表什么意思?

Ruby on Rails 更新触发了 Mailer 函数中的 ArgumentError

Rails ActiveRecord 中的更新插入

在 rails 3 中设置记录器

File.open,写入和保存?

RSpec 设置会话对象

如何在 RoR 中实现成就系统

Rails 3.1 插件 gem、虚拟测试应用程序、rspec

连接表的最佳 SQL 索引

在 RoR 中引用同一个表的多个外键

has_many :通过 class_name 和 foreign_key

ActiveModel::MissingAttributeError:无法使用 FactoryGirl 写入未知属性ad_id

Rails 3:乘客找不到Bundle 程序安装的 git gem

Date.current 和 Date.today 有什么区别?

警告:运行 ruby​​ 或 gem 命令时不安全的世界可写目录

为什么 rails bootstrap 这么慢,我该怎么办?