Screencaster Transmitindo conhecimento




Ruby on Rails #6 – Upload de arquivos e redimensionamento de imagens

Bom dia, boa tarde, boa noite :D

Vamos seguindo nossa série de tutoriais sobre ruby on rails. Hoje vou mostrar como fazer para enviar arquivos associados ao model no Rails, e também como redimensionar fotos com ruby on rails, tópicos bastante interessantes, e resolvidos de forma muito simples, graças ao plugin paperclip.

Segue o comando que você deve rodar para instalar o paperclip na sua aplicação Rails:

ruby script/plugin install git://github.com/thoughtbot/paperclip.git

Seguem alguns links de apoio para este episódio:

- Instalando rMagick no Mac OS X Leopard
- Instalando rMagick no Windows
- Instalando rMagick no Linux

E, caso vocês ainda não tenham baixado a aplicação, entrem no repositório do github e façam isso. Caso não saiba como fazer, assista o episódio número 5.

Eu consigo produzir conteúdo gratuito para o blog graças à ajuda do pessoal que compra as aulas pagas. Se você puder, compre uma das aulas pro e ajude a manter este blog no ar.


29 pessoas comentaram

  1. Thiago Retondar disse:

    Excelente dica.

    Parabéns pelo um ano do Screencaster. ;D

    Poderia fazer com que o “cliente”, na hora de fazer o Upload, escolher se desejasse miniatura ou médio?

    Abraços.

  2. inside disse:

    Acredito que sim Thiago, é difícil algo que não seja possível com Rails =]
    Dê uma olhada na documentação do paperclip sobre isso

  3. Thiago Retondar disse:

    Só mais uma dúvida, Guilherme. =D

    Demora muito o próximo screeencat? hehehehehe Fiquei fissurado por Ruby On Rails.

    Abraços.

  4. inside disse:

    Espero que não, vou tentar continuar o mais breve possível ;)

  5. Thiago Retondar disse:

    Sei que essa minha dúvida não tem muito haver com o assunto, mas o Ruby On Rails é seguro?

    NUnca programei mas me disseram que tem como deixar o PHP mais seguro. E com o Ruby (On Rails)? A única linguagem que estou aprendendo é ActionScript e ainda estou no começo.

    Creio eu que Ruby (On Rails) seja seguro por ser Orientado a Obejeto.

  6. to acompanhando essas aulas faz poco tempo… mas to mto satisfeito ja…. continua assim inside.. ta mandando bem cara….
    sempre q der eu dou umaa passada aki abraço!

  7. inside disse:

    Thiago, o Rails cuida da parte de segurança quase toda para você. Tem alguns cuidados que precisam ser tomados, que pretendo tratar num screencast futuro.

    Que bom que está gostando Filipe

  8. Agnaldo disse:

    Muito bom.
    Ainda uso Ruindows ,estou ficando apaixonado por Mac.
    Que soft vc usa pra gravar as aulas ?

  9. Eduardo disse:

    Primeiramente, parabéns… ficando legal!!

    Começei a assistir ontem e já estou esperando o sétimo video!! :)

    Bom… só está acontecendo uma coisa, fiz tudo como você fez, quando atualizo um item que não tinha foto, é criado lá dentro de uploads/foto/[numero_do_item]/[arquivo], tudo certinho. Porém, na view show, não apresenta a foto, mesmo eu colocando aquele parâmetro (:miniatura).

    O caminho que uma foto encontra-se por exemplo quando vejo pelo browser é:
    http://localhost:3000/uploads/fotos/4/tn_apple_macbook_13-inch_white_miniatura.jpg?1238733526

    Estou fazendo algo errado?

    Abraço e mais uma vez, meus parabéns!!!

  10. Fernando disse:

    Ótimo video tutorial
    Não imaginava que o Paperclip fosse tão fácil de usar

  11. sdik disse:

    Kra muito show, agora consigo entender esse ruby on rails, a muito tempo vinha lendo até procurando videos mas nada foi desse nivél, continue assim.

    Estou esperando pelos proxímos.

  12. Rafael disse:

    Ótimo tutorial, estou esperando os próximos.
    Não entendo quase nada de RoR, mas gostaria de saber se é muito dificil para fazer um upload de imagens, mas ao invés de enviar somente uma foto para um produtos eu pudesse enviar a quantia que eu escolhesse, igual no gallery.

  13. inside disse:

    Rafael, neste caso você criaria um model chamado foto, colocaria nele belongs_to :produto, e em produto has_many :fotos, e colocaria o paperclip no model foto. Bem resumidamente é isso ;)

    []‘s

  14. Antonio disse:

    Otimo screen!
    Só queria uma dica…
    talvez aconteça do usuario subir uma imagem com nome parecido, entao queria que o nome da imagem fosse um random de numeros (Ex.: 79842168456121.jpg)…tem como??

  15. Antonio disse:

    Blz!
    Consegui!

    /images/profiles/:style/:style_#{Array.new(20){(rand(9))}.join}.:extension

    Retornou algo do tipo: medium_45122234545241131158.jpg

  16. Paulo disse:

    tentei o q o antonio disse mais o arquivo fica com o nome certinho e no banco de dados nao??
    ex: na pasta eu encontro uma imagem 93419381293.jpg mais no banco esta imagemteste.jpg

    como resolver isso?

  17. Andre disse:

    Estou acompanhando todos os Videos e não estou conseguindo fazer a gravação da imagem, me retorna a seguinte mensagem:

    2 errors prohibited this produto from being saved
    There were problems with the following fields:

    Foto C:/DOCUME~1/ANDRE~1.CAR/CONFIG~1/Temp/stream.5516.0 is not recognized by the ‘identify’ command.
    Foto C:/DOCUME~1/ANDRE~1.CAR/CONFIG~1/Temp/stream.5516.0 is not recognized by the ‘identify’ command.

    Porque esta dando esta mensagem de erro?

    Desde já agradeço o seu apoio.

    Obrigado.

  18. inside disse:

    André, isto me parece algum problema com a sua instalação do image magick. Não saberia explicar exatamente qual o problema, pesquise por este erro no Google e veja o que descobre.

  19. Renan disse:

    Fala alguem,

    O que eu preciso para rodar o script “ruby script/plugin install git://github.com/thoughtbot/paperclip.git”

    Tento que ter o git instalado. Tentei instalar lendo um tuto do blog do akita, mais eu acho que ele estava ensinando a configurar um servidor proprio.

    Por favor me ajudem, to querendo chegar logo ao screen cast 11 e este esta comlicado demais.

    Vlw galera.

    O inside, da uma forca ai, pode ser explicacao de instalacao para windows ou linux.

    Vlw nvmt.

  20. quyk disse:

    Quando coloco a tag

    { :multipart => true }) do |f| %>

    na hora de cadastrar o produto a pagina fica em branco, alguem sabe me dizer o pq?

  21. Danilo disse:

    Ei Andre, instala isso aqui que resolve teu problema:
    http://www.imagemagick.org/download/binaries/ImageMagick-6.5.4-2-Q16-windows-dll.exe

    E pra quem usa linux:
    sudo apt-get install imagemagick

  22. Norba disse:

    Olá, queria saber como seria, se eu quisesse fazer upload por exemplo de um arquivo pdf, e depois mostrar um link na view show para este pdf e abrí-lo em outra janela ! Por favor se puder me ajudar, estou desenvolvendo um aplicativo de Leis para a Prefeitura da minha cidade, e só está me faltando isso pra terminar !

    Agradeço desde já =D

    • inside disse:

      Olá Norba. Para fazer upload de outros tipos de arquivo apenas ignore a parte dos tamanhos da imagem (styles), o resto a princípio continua igual. No entanto, recomendo que dê uma verificada na documentação do paperclip para ver o que você deve fazer para tratar o upload corretamente.

  23. Norba disse:

    Deu certo o upload dos arquivos em pdf, valew cara !

    Continue assim, ajudando a todos !

  24. Esse link do paperclip não funciona mais?

    Existe alguma outra fonte?

    Obrigado?

  25. Eric Alves disse:

    Olá, estou com o mesmo problema que o andré teve, já fiz de tudo, o imagemagic está instalado corretamente, segui os passos de instalação no link q vc passou e não funciona, tem alguma idéia?

  26. Mario Costa disse:

    Estou tendo problema com o paperclip na hora do resize …. já instalei o IM, no console funcionao comando identify, convert -v ….
    Estou utilizando windows e estou tendo a seguinte mensagem:

    C:/DOCUME~1/ADMINI~1/CONFIG~1/Temp/stream,252,0.gif is not recognized by the ‘identify’ command.

    Até achei algumas referencias sobre criar um initializer mas não consegui resolver essa joça … desde já agradeço

Agora é a sua vez: