2015-06-04 10 views
6

Sto cercando di caricare file e inviarlo parametri POST allo stesso tempo, in questo modo:Guzzle ~ 6,0 multipart e form_params

$response = $client->post('http://example.com/api', [ 
    'form_params' => [ 
     'name' => 'Example name', 
    ], 
    'multipart' => [ 
     [ 
      'name'  => 'image', 
      'contents' => fopen('/path/to/image', 'r') 
     ] 
    ] 
]); 

Tuttavia i miei campi form_params vengono ignorati e solo i campi più parti sono presenti nel mio corpo dopo . Posso inviare entrambi con guzzle 6.0?

risposta

11

Mi sono imbattuto nello stesso problema. È necessario aggiungere i tuoi form_params all'array multipart. Dove "nome" è il nome dell'elemento del modulo e "contenuto" è il valore. Il codice di esempio che hai fornito diventerebbe:

$response = $client->post('http://example.com/api', [ 
    'multipart' => [ 
     [ 
      'name'  => 'image', 
      'contents' => fopen('/path/to/image', 'r') 
     ], 
     [ 
      'name'  => 'name', 
      'contents' => 'Example name' 
     ] 
    ] 
]); 
3

Ci sono arrivato anche io, ma sfortunatamente non funziona se si dispone di array di parametri multidimensionali. L'unico modo che ho preso a lavorare è se si invia i form_paramaters come parametri di query nella matrice:

$response = $client->post('http://example.com/api', [ 
    'query' => [ 
     'name' => 'Example name', 
    ], 
    'multipart' => [ 
     [ 
      'name'  => 'image', 
      'contents' => fopen('/path/to/image', 'r') 
     ] 
    ] 
]); 
+0

Sei riuscito a utilizzare correttamente questa combinazione di RequestOptions? Quando eseguo quella richiesta, i miei elementi di query vengono inviati ma il multipart non lo fa. – Brady

+0

Secondo il manutentore di Guzzle, questo non può funzionare. Multipart non può essere mescolato con altre opzioni di richiesta. https://github.com/guzzle/guzzle/issues/1386 – Brady

+0

Correzione. Questo dovrebbe funzionare perché la query non è un'opzione correlata al corpo. – Brady

1

Secondo la documentazione ufficiale, multipart e form_params opzioni non possono essere utilizzate allo stesso tempo. Dovrai usare l'uno o l'altro.

Utilizzare form_params per richieste application/x-www-form-urlencoded e multipart per richieste multipart/form-data.