A enviar um ficheiro nos carris

Sou novo no rails, e estou a escrever um site repousante usando a técnica CRUD. Até agora eu criei três páginas, Todas as quais permitem ao usuário criar, editar e excluir uma linha do banco de dados. No entanto, minha quarta página vai precisar incluir um formulário de arquivo de upload, mas a) eu não sei como o sistema de arquivos funciona com trilhos, assim eu não sei onde arquivos devem ser armazenados. O arquivo seria em torno de 100kb e não poderia ser armazenado em armazenamento temporário, porque ele será constantemente baixado. E b) Eu não sei como escrever para um arquivo.

seria ótimo se você pudesse me dizer como fazer o que mencionei acima - criar uma entrada de upload em um formulário de entrada, e então escrever o arquivo em um arquivo em um diretório separado.

Author: CRABOLO, 2013-01-05

3 answers

Apesar de existirem muitas pedras preciosas que resolvem o envio de Ficheiros muito bem (ver https://www.ruby-toolbox.com/categories/rails_file_uploads para uma lista), os carris têm ajudantes incorporados que tornam mais fácil rolar a sua própria solução.

Use o Suporte file_field-forma na sua forma, e os carris tratam do Carregamento para si:

<%= form_for @person do |f| %>
  <%= f.file_field :picture %>
<% end %>

Terá acesso no controlador ao ficheiro carregado do seguinte modo:

uploaded_io = params[:person][:picture]
File.open(Rails.root.join('public', 'uploads', uploaded_io.original_filename), 'wb') do |file|
  file.write(uploaded_io.read)
end
Depende da complexidade do que queres fazer. alcançar, mas isso é totalmente suficiente para tarefas fáceis de upload/download de arquivos. Este exemplo é extraído dos guias de trilhos, você pode ir lá para mais informações: http://guides.rubyonrails.org/form_helpers.html#uploading-files
 103
Author: fabi, 2013-12-05 13:03:42

Há uma bela jóia especialmente para carregar ficheiros : carrierwave. Se o wiki não ajudar, há um Bom RailsCast sobre a melhor maneira de usá-lo . Resumindo, existe um tipo de campo file nos formulários de Carris, que invoca a janela de envio de ficheiros. Você pode usá-lo , mas a 'magia' é feita por carrierwave gem .

Não sei o que queres dizer com "como escrever para um ficheiro" , mas espero que seja um bom começo.
 3
Author: R Milushev, 2013-01-05 17:08:10

Sept 2018

Para qualquer pessoa que verifique esta questão recentemente, Rails 5.2+ tem agora a opção ActiveStorage por omissão e recomendo vivamente que a verifique.

Uma vez que faz parte do Core Rails 5.2+ agora, está muito bem integrado e tem excelentes capacidades fora da caixa (ainda todas as outras pedras conhecidas como Carrierwave, Shrine, paperclip,... são grandes, mas este oferece características muito boas que podemos considerar para qualquer novo projeto Rails)

Clip a equipa desactualizou a gema a favor da ActiveStorage dos carris.

Aqui está a página do github para a ActiveStorage e muitos recursos estão disponíveis em toda a parte

Também achei este vídeo muito útil para entender as características da Activestorage

 0
Author: Ahmed Elkoussy, 2018-09-21 18:21:19