Le téléchargement d'un fichier dans les Rails
Je suis nouveau sur les rails, et je suis en train d'écrire un séjour Reposant site web en utilisant le CRUD technique. Pour l'instant j'ai créé trois pages, le tout permettant à l'utilisateur de créer, modifier et supprimer une ligne de la base de données. Cependant, mon quatrième page aurez besoin d'inclure un fichier de téléchargement formulaire, mais a) je ne sais pas comment le système de fichiers qui fonctionne avec des Rails donc je ne sais pas où les fichiers doivent être stockés. Le fichier serait d'environ 100 ko et ne pouvait pas être stockées dans le stockage temporaire, car il va constamment être téléchargé. Et b) je ne sais pas comment écrire dans un fichier.
Ce serait génial si vous pouviez me dire comment faire ce que j'ai mentionné ci-dessus - créer un upload d'entrée sur un formulaire de saisie, puis d'écrire le fichier dans un chemin d'accès du fichier dans un répertoire séparé.
Vous devez vous connecter pour publier un commentaire.
Mise à jour 2018
Tandis que tout ce qui est écrit ci-dessous est toujours valable, Rails 5.2 comprend maintenant
active_storage
, qui permet à des trucs comme le téléchargement directement à S3 (ou d'autres services de stockage en nuage), à l'image des transformations, etc. Vous devriez vérifier le guide rails et de décider par vous-même ce qui convient à vos besoins.Bien qu'il existe beaucoup de pierres précieuses qui permettent de résoudre téléchargement du fichier plutôt bien (voir https://www.ruby-toolbox.com/categories/rails_file_uploads pour une liste), les rails a intégré dans les aides qui le rendent facile à rouler votre propre solution.
Utiliser le
file_field
-forme de l'aide dans votre formulaire, et les rails gère le téléchargement pour vous:Vous aurez accès dans le contrôleur vers le fichier téléchargé comme suit:
Cela dépend de la complexité de ce que vous voulez atteindre, mais c'est tout à fait suffisante pour faciliter le téléchargement du fichier/télécharger des tâches. Cet exemple est tiré de l'rails guides, vous pouvez y aller pour de plus amples informations: http://guides.rubyonrails.org/form_helpers.html#uploading-files
File.open
( ruby-doc.org/core-1.9.3/File.html#method-c-open ).wb
au lieu de simplementw
, ou téléchargement peut échouer pour des fichiers avec des caractères non ascii.new
méthode de contrôleur?Septembre 2018
Pour quiconque de vérifier cette question récemment, Rails de 5,2+ a maintenant ActiveStorage par default & je vous recommande vivement de vérifier it out.
Depuis qu'elle est partie de la base de Rails de 5,2+ maintenant, il est très bien intégré & a d'excellentes capacités de la boîte (encore que tous les autres bien connus des perles comme Carrierwave, Sanctuaire, trombone,... sont grands, mais celui-ci offre de très bonnes caractéristiques que nous pouvons envisager pour les nouveaux Rails de projet)
Trombone équipe obsolète la gemme en faveur des Rails ActiveStorage.
Voici la page github pour le ActiveStorage & de nombreuses ressources sont disponibles partout
Aussi j'ai trouvé cette vidéo être très utile pour comprendre les caractéristiques des Activestorage
Il y a un joli bijou en particulier pour le téléchargement de fichiers : carrierwave. Si le wiki n'aide pas , il y a un nice RailsCast sur la meilleure façon de l'utiliser . En résumant , il y a un champ de type
file
dans les Rails formes , qui appelle le téléchargement de fichier boîte de dialogue. Vous pouvez l'utiliser , mais la "magie" est fait parcarrierwave
gem .Je ne sais pas ce que tu veux dire par "comment écrire dans un fichier" , mais j'espère que c'est un bon début.
D'accord. Si vous ne voulez pas stocker le fichier dans la base de données et de les stocker dans l'application, comme des actifs (dossier personnalisé), vous pouvez définir des non-db d'instance de variable défini par attr_accessor: document et à l'utilisation
form_for - f.file_field
pour obtenir le fichier,Contrôleur,
Ici
person_params
de retour dans la liste blancheparams[:person]
(définir vous-même)Enregistrer le fichier sous
Note, Ajoutez un chemin
.gitignore
& si vous souhaitez utiliser ce fichier, ajoutez à nouveau ce cheminasset_path
un de application parapplication.rb
Chaque fois que le formulaire de lire le fichier de champ, il se stocker dans le dossier tmp, plus tard, vous pouvez stocker à votre place, j'ai donné l'exemple pour stocker les biens
note: le Stockage de fichiers comme ceci permettra d'augmenter la taille de l'application, le mieux est de stocker dans la base de données à l'aide de
paperclip
.Dans votre intiallizer/carrierwave.rb
l'utiliser pour stocker dans un fichier lors de l'exécution sur local