ruby-on-rails - rails : How to post a file via HTTP as multipart/form-data to Facebook?

标签 ruby-on-rails ruby-on-rails-3 facebook facebook-graph-api heroku

我想使用 Net::HTTP::multipart 从 Heroku 应用程序向 Facebook 发布一张新照片给用户。

我有以下 JSON 对象:

{"message"=>"My message", "image"=>#<ActionDispatch::Http::UploadedFile:0x00000004242490 @original_filename="neEZYMAnBI.jpg", @content_type="application/octet-stream", @headers="Content-Disposition: form-data; name=\"image\"; filename=\"/home/user/public/direct/fb_images/neEZYMAnBI.jpg\"\r\nContent-Type: application/octet-stream\r\n", @tempfile=#<File:/app/tmp/RackMultipart20110818-1-18qnwtj>>, "method"=>"post", "access_token"=>"my_access_token", "format"=>"json"}

我尝试使用:

require 'net/http/post/multipart'

url = URI.parse('https://graph.facebook.com/me/photos?access_token=#{params[:access_token]}')
File.open(params[@tempfile]) do |jpg|
  req = Net::HTTP::Post::Multipart.new url.path,
    "file" => UploadIO.new(jpg, "image/jpeg", "image.jpg")
  res = Net::HTTP.start(url.host, url.port) do |http|
    http.request(req)
  end
end

但是:

  1. 它没有发送数据。
  2. 我找不到如何将 params[:message] 与文件一起发送以便为图像添加标题。

有人可以提出解决方案吗?

谢谢

最佳答案

您已经可以使用 params[:image].tempfile 访问一个 File 实例(嗯,一个 TempFile 实例)

丢弃所有 File.open 的东西并用它简单地构造一个 UploadIO:

UploadIO.new(params[:image].tempfile, ...)

关于ruby-on-rails - rails : How to post a file via HTTP as multipart/form-data to Facebook?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7121201/

相关文章:

ruby-on-rails - Rails 4 image-path、image-url 和 asset-url 不再在 SCSS 文件中工作

ruby-on-rails - Rails3 : how to set default conditions to has_many

ruby-on-rails - 基于 GMT 的 SOAP4R SOAPDateTime 格式

facebook - 分享现有的 Facebook 帖子(从而增加原始帖子的 'Shares' 计数

facebook - 如何将 Facebook 页面的近期事件包含到网站中?

facebook -/me/home 检索新闻提要的过时 View

ruby-on-rails - 有没有更好的方法在 Rails 中创建只读属性?

ruby-on-rails - 使用OAuth从Twitter获取名字/姓氏/电子邮件

ruby-on-rails - 如何从应用程序/模块扩展 ActiveRecord?

ruby-on-rails - 如何在 erb 文件中打印包含换行符的字符串