Sugira-me uma maneira de salvar uma imagem de um URL pelo Paperclip.
ruby-on-rails
ruby
upload
paperclip
khanh
fonte
fonte
update_attributes
renomearpicture_from_url
para,picture_url=(value)
por exemplo.user.picture_from_url('/etc/password')
. Provavelmente é bom na maioria das situações.open(url)
, o nome do arquivo não é exato, por exemplo, emopen-uri20150106-10034-lpd5fm.
vez deef3a601e_ef3d008b_ef3d0f7e.jpg
.No Paperclip 3.1.4, ficou ainda mais simples.
Isso é um pouco melhor que aberto (url). Porque com open (url) você receberá "stringio.txt" como o nome do arquivo. Com o exposto acima, você receberá um nome adequado do arquivo com base na URL. ie
fonte
application/octet_stream
comocontent_type
.Não funcionou para mim até que eu usei "aberto" para URI analisado. uma vez que adicionei "aberto", funcionou!
Minha versão do clipe de papel é 4.2.1
Antes da abertura, ele não detectava o tipo de conteúdo certo, porque não era um arquivo. Diria image_content_type: "binary / octet-stream" e, mesmo que eu o substitua pelo tipo de conteúdo correto, não funcionará.
fonte
Primeiro faça o download da imagem com a
curb
gema para aTempFile
e, em seguida, simplesmente atribua o objeto tempfile e salve seu modelo.fonte
Pode ser útil para você. Aqui está o código usando um clipe de papel e uma imagem presente no URL remoto.
No modelo
fonte
Como esses são antigos respondedores, aqui está um mais novo:
Adicione o URL remoto da imagem ao controlador desejado no banco de dados
Edite seu modelo
* No Rails4, você precisa adicionar o attr_accessible no Controller.
Atualize seu formulário, se você permitir que outro faça upload de uma imagem de um URL
fonte
super
?super
é usada para invocar o método original, em busca do corpo do método começa na classe super do objeto que foi encontrado para conter o método originalEste é um método incondicional:
onde Uuid.uuid apenas cria algum ID aleatório.
fonte
Na documentação oficial é relatada aqui https://github.com/thoughtbot/paperclip/wiki/Attachment-downloaded-from-a-URL
De qualquer forma, não parece atualizado, porque na última versão do clipe de papel algo mudou e esta linha de código não é mais válida:
Ele gera um erro, em particular esse erro é gerado:
A nova sintaxe correta é esta:
Também precisamos adicionar essas linhas no arquivo config / initializers / paperclip.rb :
Testei isso com a versão de clipe de papel
5.3.0
e funciona.fonte