2017-05-10 3 views
0

Ich versuche mit der Slack-API in Ruby zu arbeiten. Sie haben diese Schnipsel als Beispiel auf ihrer WebsiteDatei von Slack in Ruby herunterladen

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 

Was ich nicht verstehe, ist, wie sie die abgerufenen Bild hinzufügen zu ‚f‘, und dann irgendwie die Datei mit der Variable ‚file‘ hochladen. Wo kommt 'f' ins Spiel?

+0

Haben Sie den Link, woher Sie dieses Snippet genommen haben? – Jeremie

+0

Yup, diese Seite https://api.slack.com/tutorials/working-with-files – humdinger

Antwort

3

Wenn Sie sprechen über diesen Block

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

dann wird die Datei in Binär-Modus zu schreiben (das ist, was wb es tut), dann ist es, den Inhalt zu schreiben, die Datei Datei und schließen dann, Gleiches kann mit

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

erreicht werden, aber die erste Methode ist eine gute Weise, es zu definieren.

1

So, hier ist die fetch_image Methode

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 

Welche in Ihrem Controller/Modell benötigt wird.

Dies ist ein grobes Beispiel, ich gebe zu, aber im Grunde ist der Datei-Download der erste Teil dieses Skripts. Sie möchten diesen Teil verwenden:

filename = file.timestamp 

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

Sie können dann etwas mit f tun, das ist die Datei, die Sie heruntergeladen haben. Sie können auch

file_path = open(file.url_private).path 

verwenden, um die Datei herunterzuladen.

In dem bereitgestellten Beispiel scheinen sie ein Modell namens FaceDetection zu verwenden und laden Sie die Datei file, um andere Aufgaben vorzufüllen.

Ich hoffe, das macht Sinn und hilft.