从Ruby中的Slack下载文件

时间:2017-05-10 01:57:06

标签: ruby-on-rails ruby slack-api

我正在尝试使用Ruby中的Slack API。他们将此代码段作为其网站上的示例

def fetch_and_compose_image(file, channel)

  filename = file.timestamp

  if file.filetype == "jpg"
    File.open("./tmp/#{filename}", 'wb') do |f|
      f << fetch_image(file.url_private)
    end

    fd = FaceDetection.new

    if fd.process_image
      file_id = upload(file, channel)
      add_reactions(file_id, fd)
    end
  end
end

我不明白的是,他们如何将获取的图像添加到'f',然后以某种方式使用变量'file'上传文件。 'f'在哪里发挥作用?

2 个答案:

答案 0 :(得分:3)

如果你在谈论这个块

File.open("./tmp/#{filename}", 'wb') do |f|
  f << fetch_image(file.url_private)
end

然后它以二进制模式写文件(那是wb在那里做的),然后它将内容写入文件然后关闭文件,同样可以用

to_write_file = File.open("./tmp/#{filename}", 'wb')
to_write_file << fetch_image(file.url_private)
to_write_file.close

但第一种方法是定义它的好方法。

答案 1 :(得分:1)

所以,这是fetch_image方法

def fetch_image(url)
  res = RestClient.get(url, { "Authorization" => "Bearer #{@team.access_token}" })

  if res.code == 200
    return res.body
  else
    raise 'Download failed'
  end
end

您的控制器/型号需要哪个。

这是一个粗略的例子,我承认,但基本上,文件下载是这个脚本的第一部分。你想使用这个部分:

filename = file.timestamp

if file.filetype == "jpg"
  File.open("./tmp/#{filename}", 'wb') do |f|
    f << fetch_image(file.url_private)
  end
end

然后,您可以使用f执行某些操作,即您下载的文件。您也可以使用

file_path = open(file.url_private).path

下载文件。

在提供的示例中,他们似乎使用名为FaceDetection的模型并上传文件file以执行其他任务。

我希望这是有道理和有帮助的。