2017-05-12 1 views
0

J'essaye de POST des données multipart et json avec Guzzle pour construire mes applications avec Phonegap Build API. J'ai essayé de nombreux réglages mais j'ai quand même obtenu des résultats d'erreur. Voici la dernière fonction que je utilise:Post Multipart et Json avec Guzzle dans Laravel

public function testBuild(Request $request) 
{ 
    $zip_path = storage_path('zip/testing.zip'); 
    $upload = $this->client->request('POST', 'apps', 
      ['json' => 
      ['data' => array(
       'title'   => $request->title, 
       'create_method' => 'file', 
       'share'   => 'true', 
       'private'  => 'false', 
      )], 
      'multipart' => 
      ['name'   => 'file', 
      'contents'  => fopen($zip_path, 'r') 
      ] 
      ]); 
     $result = $upload->getBody(); 
     return $result; 
} 

Ceci est mon format de boucle correct qui a fait de la réussite de l'API, mais avec le fichier je dans mon bureau:

curl -F [email protected]/Users/dedenbangkit/Desktop/testing.zip 
-u [email protected] 
-F 'data={"title":"API V1 App","version":"0.1.0","create_method":"file"}' 
https://build.phonegap.com/api/v1/apps 
+0

'Cette option ne peut pas être utilisé avec le corps, form_params ou json' de http: //docs.guzzlephp. org/fr/latest/request-options.html # multipart – mimo

+0

Alors, quelle est votre suggestion? devrais-je revenir à cette publication normale CURL? –

+0

vous pouvez faire 2 demandes ou vous le codez dans l'url – mimo

Répondre

0

Comme mentionné précédemment , vous ne pouvez pas utiliser multipart et json ensemble.

Dans votre curl exemple, il est juste une forme multipart, utilisez donc la même chose dans Guzzle:

$this->client->request('POST', 'apps', [ 
    'multipart' => [ 
     [ 
      'name' => 'file', 
      'contents' => fopen($zip_path, 'r'), 
     ], 
     [ 
      'name' => 'data', 
      'contents' => json_encode(
       [ 
        'title' => $request->title, 
        'create_method' => 'file', 
        'share' => 'true', 
        'private' => 'false', 
       ] 
      ), 
     ] 
    ] 
]); 
+0

Merci, votre le code fonctionne pour moi. Mais pourquoi le tableau n'a pas fonctionné pour les données de contenu? –

+0

Parce que 'contents' est (simplement) un tableau d'octets. 'json' dans Guzzle est juste une petite aide fantaisie qui fait' json_encode() 'pour vous, mais cela ne fonctionne que pour les corps" simples ", l'option multipart n'a pas cette aide. –

+0

J'ai compris, maintenant je comprends comment fonctionne Guzzle. Merci beaucoup! –