在Ruby on Rails上使用Koala将文件上传到Facebook

Sid*_*Sid 4 file-upload ruby-on-rails facebook-graph-api koala

我按照以下博文来弄清楚如何使用我的应用程序远程创建Facebook事件.我一直在从我的应用程序加载图像时遇到问题,但是,因为我的应用程序没有本地存储的图像,所以它们存储在AWS中.

    @graph = Koala::Facebook::GraphAPI.new(@token)  
    picture = Koala::UploadableIO.new(@event.photo.url(:small))
    params = {
        :picture => picture,
        :name => 'Event name',
        :description => 'Event descriptio
        :start_time => datetime,
       }
Run Code Online (Sandbox Code Playgroud)

是我正在使用以下代码在我的应用程序上创建Facebook事件时将图片发送到Facebook.但是,问题是Rails抛出错误:没有这样的文件或目录 - http://s3.amazonaws.com/ColumbiaEventsApp/photos/21/small.jpeg?1312521889.

对Rails开发更有经验的人是否知道我是否有办法将URL视为文件路径?UploadableIO类需要一个文件路径,而我正在努力弄清楚Ruby是否有办法将URL视为文件路径.存储在应用程序上的照片可以加载到Facebook的方式如下:

picture =考拉:: UploadableIO.new(File.open("路径到你的事件图像"))

如果这有帮助.

我很欣赏这个问题的任何新见解.

Sid*_*Sid 9

好的,所以我玩了一下,想出了如何发布图片.

基本上我所做的是使用'open-uri'库将图像链接转换为文件对象,然后可以将其传递给UploadableIO并发送到Facebook.这是有效的代码:

require 'open-uri'
OpenURI::Buffer.send :remove_const, 'StringMax' if OpenURI::Buffer.const_defined?('StringMax')
OpenURI::Buffer.const_set 'StringMax', 0
picture = Koala::UploadableIO.new(open(@event.photo.url(:small)).path, 'image')
params = {
  picture:     picture,
  name:        @event.name,
  description: @event.description,
  location:    @event.location,
  start_time:  datetime
}
@graph.put_object('me', 'events', params )
Run Code Online (Sandbox Code Playgroud)

需要更改OpenURI常量StringMax,因为我使用的图像文件足够小,文件被处理为字符串而不是文件对象.

希望这有助于任何人试图解决这个问题!