我正在尝试使用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'在哪里发挥作用?
答案 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
以执行其他任务。
我希望这是有道理和有帮助的。