2016-11-11 1 views
1

Cela fonctionne pour moi dans la coquille:Comment publier un fichier et retourner le statut avec HTTParty

export TOKEN='eyJqdGkiOiIzZDkzNz' 
curl https://apis.xxxxxxxx.com/v2-beta/media \ 
    --header "Authorization: Bearer $TOKEN" \ 
    --form 'configuration={"configuration" : {"executor": "v2"}}' \ 
    --form media="@recording.mp3" \ 
    | tee media-post-response.json | jq '.' 
export MEDIA_ID=$(jq --raw-output '.mediaId' < media-post-response.json) 
echo "Uploaded file with mediaId = ${MEDIA_ID}" 

Je veux faire la même chose avec HTTParty, cependant, je ne trouve pas d'exemple partout qui montre comment ces les en-têtes devraient être spécifiés.

Voici ce que j'ai, mais il jette une erreur JSON:

require 'httparty' 
require 'json' 
require 'pp' 

token = "6Ijg3ZDMzODUxLTdlMmMtN" 


url = "https://apis.xxxxxxxx.com/v2-beta/media" 

options = { 
    :headers => {"Authorization" => " Bearer #{token}", "Content-Type" => "multipart/form-data" , "Accept" => "application/json"}, 
    :body => {"media" => '@recording.mp3'} 
    } 
puts "***** #{options} ******\n" 

j = HTTParty.post(url, options) 
s = JSON.parse(j.body) 
pp s 

L'erreur est:

(error) .rvm/rubies/ruby-2.3.0/lib/ruby/2.3.0/json/common.rb:156:in `parse': 784: unexpected token at 'Failed to create MuleMessage (org.mule.api.lifecycle.CreateException)' (JSON::ParserError) 
+0

Votre commande curl a configuration '--form » = { "configuration": { "exécuteur": "v2"}} '' mais ça semble manquer à ton code Ruby. Est-ce nécessaire, peut-être? Aussi, vous avez un espace mystère avant 'Bearer' dans votre code Ruby, mais je doute que ce soit le problème. –

+1

Oh, je viens de réaliser que vous essayez de télécharger un fichier. La syntaxe '@' ('@ recording.mp3') est spécifique à curl et ne fonctionnera pas dans HTTParty. Il semble que HTTParty ne suppose pas de téléchargement en plusieurs parties, mais il existe une gemme appelée httpmultiparty qui fait le travail. Jetez un oeil à ce fil: https://github.com/jnunemaker/httparty/issues/77 –

+0

Merci, j'ai vu httmulitparty mais il semble être une sorte de gemme non pris en charge (abandonné?). Même en l'utilisant, je ne vois pas comment régler correctement les en-têtes. Cela ne fonctionne pas: options = { : en-têtes => {"Autorisation" => "Support # {token}"}, : media => Fichier.nouveau ('enregistrement.mp3') } – jacksonp

Répondre

1

En utilisant la gemme RESTClient nous pouvons facilement gérer les téléchargements de fichiers, mais assurez-vous Assurez-vous d'installer la gemme rest-client.

Et j'ai également joint la capture d'écran de demande d'exemple de facteur.

Et le code dans le contrôleur comme comme ci-dessous,

res = RestClient::Request.execute(
     method: :post, 
     url: "http://www.your_url.com", 
     payload: params, 

     headers: { 
      'Content-Type' => "multipart/form-data", 
      Authorization: "some_key", 
      :Accept => "*/*" 
     } 

) 

enter image description here