Comparez les prix des domaines et des services informatiques des vendeurs du monde entier

Chargement du fichier B. Rails

Je suis nouveau à B. rails, Et j'écris un site web RESTful, En utilisant la technique CRUD. Jusqu'à présent, j'ai créé trois pages, chacune permettant à l'utilisateur de créer, de modifier et de supprimer une chaîne de la base de données. Cependant, ma quatrième page devra inclure le formulaire de chargement de fichier, mais/ Je ne sais pas comment le système de fichiers fonctionne avec Rails, Par conséquent, je ne sais pas où les fichiers doivent être stockés. Le fichier sera proche 100 KB et ne peuvent pas être enregistrés dans un stockage temporaire, car il sera constamment chargé. Et B./ Je ne sais pas comment écrire dans le fichier.

Ce serait bien si tu pouvais me dire comment faire ce que j'ai mentionné ci-dessus - Créez une entrée de démarrage dans le formulaire d'entrée, puis écrivez le fichier sur le chemin de fichier dans un répertoire distinct.
Invité:

Alice

Confirmation de:

Mettre à jour 2018

Bien que tout écrit ci-dessous soit toujours vrai, Rails 5.2 Comprend maintenant
active_storage

, qui vous permet de télécharger des choses telles que le chargement directement dans S3 /ou d'autres services de stockage cloud/, Conversion d'image et ainsi de suite. Vous devez vérifier
https://edgeguides.rubyonrails ... .html
rails Et décidez pour vous-même, qui correspond à vos besoins.

Bien qu'il existe de nombreuses pierres précieuses qui sont assez bien résolues le problème du téléchargement de fichiers /Voir la liste https://www.ruby-toolbox.com/c ... oads/, rails Il dispose d'assistres intégrés qui vous permettent de rouler facilement votre propre solution.

Assistant d'utilisation
file_field

-form dans votre forme, et rails Processus Télécharger pour vous:


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


Vous aurez accès au contrôleur au fichier téléchargé comme suit:


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


Cela dépend de la complexité de ce que vous voulez réaliser, mais cela suffit à des tâches simples de téléchargement de fichiers. Cet exemple est pris à partir du manuel rails, Vous pouvez y aller pour plus d'informations:
http://guides.rubyonrails.org/ ... files

Hannah

Confirmation de:

septembre 2018

de l'année

Pour ceux qui ont récemment vérifié cette question,
https://guides.rubyonrails.org ... .html
Comme il fait partie du noyau Rails 5.2+ Maintenant, il est très bien intégré & a d'excellentes opportunités hors de la boîte /toujours toutes les autres pierres précieuses célèbres telles que Carrierwave, Shrine, paperclip, ... Superbe, mais cela offre de très bonnes fonctionnalités que nous pouvons envisager pour tout nouveau projet. Rails/

Les clips en papier sont obsolètes de gem en faveur Rails ActiveStorage.

https://github.com/rails/rails ... orage
& De nombreuses ressources disponibles partout

https://gorails.com/episodes/f ... s-5-2
très utile pour la compréhension des fonctionnalités Activestorage

Agathe

Confirmation de:

Il y a un bon gem Surtout pour télécharger des fichiers:
https://github.com/jnicklas/carrierwave
. Si un wiki n'aide pas
http://railscasts.com/episodes ... loads
à propos de la meilleure façon de l'utiliser . Résumer, vous pouvez dire , Quoi de forme Rails Il y a un type de champ
file

, qui provoque la boîte de dialogue Télécharger le fichier. Vous pouvez l'utiliser mais 'magic' Fini
carrierwave

gem .

Je ne sais pas ce que tu veux dire sous "how to write to a file" , Mais j'espère que c'est un bon début.

Christine

Confirmation de:

D'accord. Si vous ne souhaitez pas stocker le fichier dans la base de données et le stocker dans l'application, par exemple assets /custom folder/, Vous pouvez définir une variable d'instance qui n'est pas liée à la base de données définie attr_accessor: document et utilise
form_for - f.file_field

Pour obtenir un fichier,

Dans le contrôleur


@person = Person.new/person_params/


Ici
person_params

Retourne la liste blanche
params[:person]

/Déterminez-vous/

Enregistrez le fichier comme


dir = "#{Rails.root}/app/assets/custom_path"
FileUtils.mkdir/dir/ unless File.directory? dir
document = @person.document.document_file_name # check document uploaded params
File.copy_stream/@font.document, "#{dir}/#{document}"/


Remarque, ajoutez ce chemin à
.gitignore

&, Si vous souhaitez utiliser ce fichier à nouveau, ajoutez ce chemin
asset_path

an Applications dans
application.rb


Chaque fois que le formulaire lit le champ Fichier, il reçoit le stockage dans le dossier. tmp, Plus tard, vous pouvez le garder à la maison, j'ai dirigé un exemple pour stocker des actifs

Noter

: Le stockage de ces fichiers augmentera la taille de l'application, il est préférable de stocker dans la base de données en utilisant
paperclip

.

Blanche

Confirmation de:

Dans votre intiallizer/carrierwave.rb


if Rails.env.development? || Rails.env.test?
config.storage = :file
config.root = "#{Rails.root}/public"
if Rails.env.test?
CarrierWave.configure do |config|
config.storage = :file
config.enable_processing = false
end
end
end


Utilisez-le pour stocker dans le fichier tout en travaillant sur l'ordinateur local

Pour répondre aux questions, connectez-vous ou registre