Upload de imagem pela URL

Dicas - 07/Out/2019 - por Henrique Morato

Algumas vezes temos que receber imagens via URL e fazer upload para nossos sistemas seja de um site, Facebook, ou outras redes sociais.

Vamos ver como fazer isso usando ActiveStorage?

Abaixo temos um pequeno método que transforma a URL numa URI e depois, usando o open-uri, podemos fazer download deste arquivo para tê-lo em mãos.

require 'open-uri'

def download_to_file(uri)
    stream = URI.parse(uri).open
end

Para usar esse método podemos fazer o seguinte:

# chamamos o método a partir da URL
downloaded_image = download_to_file('UMA URL AQUI')

# user é um objeto da classe User com has_one_attached chamado avatar
user.avatar.attach(io: downloaded_image, filename: File.basename(downloaded_image.path))

# apagamos o arquivo temporário criado pelo open
downloaded_image.delete

Para saber como fazer isso com o Paperclip, veja na documentação :)