No último podcast mencionei minha escolha pelo Paperclip como meu plugin preferido para upload de arquivos. Depois disso algumas pessoas tem me perguntado porque usá-lo, já que o attachment_fu seria a opção mais conhecida.
Durante muito tempo usei o attachment_fu para esta função, mas em um projeto recente da Surgeworks optei por testar o Paperclip e depois disso acabei adotando-o como meu plugin padrão para uploads. Confesso que de inicio o grande motivo para experimentar o novo plugin foi por ele ter sido criado pela thoughtbot, o mesmo time que criou o Shoulda (que não estou usando mais, mas é uma outra história que vou explicar em um outro post), e como os caras são bons e tem criado inúmeros projetos interessantes, resolvi dar uma chance.
Mas foram alguns detalhes que me chamaram a atenção, como o fato de você não precisar de uma tabela extra no banco de dados para armazenar o caminho dos arquivos, a forma simplificada que ele oferece para se acessar e configurar o tamanho das fotos enviadas para o servidor, a macro de teste preparada para o Shoulda, a facilidade para configurar o acesso ao Amazon S3, entre outros detalhes que valorizam o plugin.
Enfim, não existe um grande motivo que chegue a desvalorizar o famoso attachment_fu ou torná-lo obsoleto. São apenas alguns pequenos detalhes que me conquistaram, só isso. É puramente uma questão de preferência pessoal.
Não importa qual plugin de upload você use, só não esqueça do :multipart => true na construção do formulário!
Usando o Paperclip em 3 passos
1. Instale o plugin em seu projeto Rails:
./script/plugin install git://github.com/thoughtbot/paperclip.git
2. Adicione três colunas na tabela que armazenará os dados dos arquivos:
end
3. Adicione uma linha no modelo com as configurações desejadas (tive de dividir em mais linhas para caber no blog):
end
Leve ao forno e sirva à vontade!
No exemplo acima acabamos de adicionar um avatar (a famosa fotinha) para os usuários. Para recuperar a foto enviada pelo usuário, use:
O attachment_fu também não é tão diferente disso, mas gosto mais do Papeclip. Apenas para fechar o artigo, um bônus! Para testar se o Paperclip está funcionando você pode pegar a macro para Shoulda, e depois adicionar uma linha ao teste do modelo:
end
Excelsior!
Acompanho sempre o que o pessoal da thoughtbot anda fazendo, os plugins deles são muito úteis e simples.
Agora fiquei curioso para saber porque você não usa mais o Shoulda.
bem, se eu quiser utilizar o paperclip em vez do attachment_fu, eu criou uma nova migration, para add as colunas nas tables daquele model em vez de se criar um model? como é utilizado no attachment_fu é isso?
Herminio,
Você pode encontrar mais informações sobre o attachment_fu aqui: http://github.com/technoweenie/attachment_fu/wikis
Parece ser mais simples que o attacment_fu mesmo.
Mas se eu quiser, por exemplo, montar um album, não dá pra usar o Paperclip, não é isso?
Lucas,
Claro que dá! Aliás, o projeto que trabalhei com ele era uma rede social (para variar) e incluía uma tabela de fotos polimórfica que servia para usuários, grupos e outras coisas.
Dããããannn! É lógico que dá! :)
Carlos,
quando você faz isto:
has_attached_file :avatar, :styles => { :medium => "300×300>", :thumb => "100×100>" }Você sempre está usando a mesma imagem, não importa a resolução, apenas redimensiona a imagem grande como se estivesse setando o width e height da tag da HTML certo?
E se caso eu queira, na hora do upload, redimensionar a mesma imagem em 2 ou 3 tamanhos diferentes, e gerando os arquivos separadamente, e gravar suas urls, isto é possível com o Paperclip?
Ricardo,
Na verdade na linha acima, eu estou fazendo exatamente o que você quer. Serão criadas 2 imagens uma com 300×300 e outra 100×100.
E para recuperar basta usar o código de exemplo com o image_tag.
Hum… show de bola!!!
./script/plugin install git://github.com/thoughtbot/paperclip.gitisso é somente em versoes > que a 2???
Sim
Carlos, acho que você esqueceu de adicionar a coluna avatar_updated_at na migration AddAvatarColumsToUser, já que a documentação do plugin no GitHub inclui ela, e aqui não funcionou sem essa quarta coluna.
Pois é… esqueci mesmo.
Tem como usar o Paperclip para fazer upload de swf e vídeos?
Abraço.
Acho que sim Patrick.
Encontrei isso aqui:
SWFUpload, Paperclip and Ruby on Rails
http://jimneath.org/2008/05/15/swfupload-paperclip-and-ruby-on-rails/
Carlos, mas como vc fez a galeria com o Paperclip?
Toda vez que uso
:styles => {
:medium => “300×300>”,
:thumb => “100×100>” }
Dá error