Question

J'utilise restclient un formulaire multipart pour envoyer des données à un service Web reposant (son service d'encodage vidéo Panda). L'astuce cependant, est que le fichier que je passe dans restclient (branche Technoweenie) vient de ma propre forme qu'un utilisateur soumet.

Alors, laisse cette promenade à travers. Un utilisateur un fichier dans mon application rails. Dans mon contrôleur, il reçoit le fichier de params [: fichier]. Je veux ensuite passer params [: fichier]. Vers le bas à l'aide Panda RESTClient

L'erreur que je reçois est sur le serveur Panda suit. Je remarqué que le fichier param dans la trace de la pile se trouve dans une chaîne aussi bien (je suppose tourne Panda en une chaîne pour un plus bel stacktrace).

 ~ Started request handling: Wed Aug 12 18:05:15 +0000 2009
 ~ Params: {"format"=>"html", "multipart"=>"true", "account_key"=>"SECURE_KEY", "action"=>"upload", "id"=>"SECURE_ID", "controller"=>"videos", "file"=>"#<File:0xcf02ca4>"}
 ~ 9bfb1750-6998-012c-4509-12313900b0f6: (500 returned to client) InternalServerErrorcan't convert nil into String
/var/local/www/panda/app/models/video.rb:246:in `extname'
/var/local/www/panda/app/models/video.rb:246:in `initial_processing'
/var/local/www/panda/app/controllers/videos.rb:79:in `upload'
Était-ce utile?

La solution

Je doute que vous pouvez vraiment passer un téléchargement de style CGI de Rails en param restclient et espérer qu'il fonctionne.

Un téléchargement régulier Rails aurait tout à fait certains attributs supplémentaires qui ne font pas partie d'une ressource affiché (comme le nom du fichier original et ainsi de suite), et un téléchargement Rails contient une IO avec les données de fichiers réels. Aussi un objet de téléchargement de fichier dans Rails pourrait être une poignée et peut-être fichier temporaire d'un StringIO -. Selon la taille du téléchargement

Ce que vous devez faire est effectivement « reconditionner » votre téléchargement pour restclient gérer correctement et passer le reconditionnés et rembobiné objet à restclient fichier temporaire. Peut-être que vous pouvez vous contenter de simplement choisir l'objet de téléchargement lui-même au lieu de l'ensemble params [: file]

Autres conseils

Assurez-vous que votre action restclient peut enregistrer localement d'abord. Si l'action ne peut pas enregistrer localement, alors vous aurez une meilleure idée où chercher tout le dépannage.

On dirait que le problème est avec l'affichage de repos client du fichier, consultez une méthode alternative pour l'affichage comme bordure.

Beaucoup d'exemples pour l'affichage des données de formulaire multipart sur cette question: Ruby: Comment publier un fichier via HTTP multipart / form-data

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top