2013-10-13 1 views
1

Dans Ruby on Rails, je laisse les utilisateurs télécharger un fichier. Je fais quelques trucs, puis je veux passer à Amazon S3 avec obj = bucket.objects [filename] .write (request.body.read)Dans Ruby on Rails, comment obtenir la charge utile de la requête sans métadonnées

Je pensais pouvoir utiliser request.body.read ou request.raw_post, Cependant, la charge utile contient toutes ces métadonnées, comme Content-Disposition et Content-Type. Comment puis-je obtenir la partie de la charge utile qui correspond exactement à ce que l'utilisateur télécharge?

Par exemple, cela est request.body.read, mais je veux juste la partie à partir de « ‡ JFIF ... ÿ »

------WebKitFormBoundaryWc3LdZGmhHmhJeuT 
Content-Disposition: form-data; name="file"; filename="test.jpg" 
Content-Type: image/jpeg 

ˇÿˇ‡JFIFHHˇ·... 
...more data... 
------WebKitFormBoundaryWc3LdZGmhHmhJeuT-- 

Répondre

-1

Vous trouverez l'objet fichier params - dans votre cas sous la touche :file: params[:file].

L'objet dans le hash de params est une instance d'une sous-classe de IO. Selon la taille du fichier téléchargé, il peut s'agir d'un StringIO ou d'une instance de File sauvegardée par un fichier temporaire. Dans les deux cas, l'objet aura un attribut original_filename contenant le nom du fichier sur l'ordinateur de l'utilisateur et un attribut content_type contenant le type MIME du fichier téléchargé.

Pour lire le contenu du fichier, appelez read.

uploaded_file = params[:file] 
uploaded_file.original_filename #=> returns in your example 'test.jpg' 
uploaded_file.read #=> returns the content of the file (ˇÿˇ‡JFIFHHˇ·...) 

En savoir plus sur uploading files in the Rails Guides.

Questions connexes