J'aimerais pouvoir lire un fichier XML téléchargé par l'utilisateur (moins de 100 Ko), mais ne pas avoir à sauvegarder ce fichier dans la base de données . Je n'ai pas besoin de ce fichier après l'action en cours (son contenu est analysé et ajouté à la base de données, mais l'analyse du fichier n'est pas le problème). Étant donné que les fichiers locaux peuvent être lus avec:comment lire un fichier téléchargé par l'utilisateur, sans l'enregistrer dans la base de données
File.read("export.opml")
Je pensais simplement créer un file_field pour: uploaded_file, puis essayer de le lire avec
File.read(params[:uploaded_file])
mais tout ce qui ne fait jeter un TypeError (peut » t convertir HashWithIndifferentAccess en String). J'ai vraiment essayé beaucoup de choses différentes (y compris la lecture du répertoire/tmp), mais je n'ai pu obtenir aucune d'entre elles pour fonctionner. J'espère que la brièveté de ma question ne masque pas l'effort que j'ai donné pour essayer de résoudre ce problème par moi-même, mais je ne voulais pas polluer cette question de cent façons de ne pas l'obtenir. terminé. . Un grand merci à tous ceux qui carillons
Voici mon avis:
<% form_for(:uploaded_file, @feed, :url => {:action=>'parse'}, :html=> {:multipart=>true}) do |f| %> <p>
<%= f.label :uploaded_file, 'Upload your file.' %><br />
<%= f.file_field :uploaded_file %>
</p>
<p><%= f.submit 'upload' %></p>
<% end %>
Je mis en place une action personnalisée (upload) qui gère le chargement file_field, qui, après la soumission, est passé à un autre action personnalisée (analyser) pour le traitement. Cela pourrait-il faire partie de mon problème?
Salut Vlad! Merci pour votre réponse. Je ne savais pas exactement comment utiliser votre code. Quand j'analyse, j'appelle file_data ou xml_contents d'une manière ou d'une autre. Comme si j'étais juste en train de définir xml = Fichier.lire (params [: upfile]) je parse (xml) Donc, je ne savais pas, mais pas un à arrêter là, j'ai essayé quelques choses différentes. J'ai essayé d'utiliser Webrick et Thin pour voir si les résultats étaient les mêmes ... ils l'étaient. Lors de l'utilisation de File.read (params [: upfile]), j'obtiens un "impossible de convertir HashWithIndifferentAccess en String" Est-ce que ça pourrait être le début de l'upfile? "uploaded_file" => {"uploaded_file" => #
GoodGets
Lorsque j'essaie d'utiliser le chemin xml = File.read (params [: upfile] .path) Je reçois un indéfini méthode 'path' Y a-t-il un problème avec ma "vue"? J'ai modifié ma question ci-dessus pour l'inclure. – GoodGets
J'ai joué avec ma vue. J'utilise maintenant: <% form_for: flux,: url => {: controller => 'flux',: action => 'parse'} do | f | %> et quand je soumets maintenant le fichier téléchargé, je reçois un TypeError "ne peut pas convertir nil en String" Donc, je suppose que quelque chose ne se passe pas correctement. – GoodGets