2015-06-04 12 views
6

Próbuję wgrać plik i przesłać parametry postu w tym samym czasie jak ten:chlać ~ 6,0 wieloczęściowy i form_params

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

Jednak moje pola form_params są ignorowane i tylko wieloczęściowe pola są obecne w moim ciele postu . Czy mogę wysyłać oba w ogóle z chęcią 6.0?

Odpowiedz

11

Wpadłem na ten sam problem. Musisz dodać swoje form_params do tablicy multipart. Gdzie "nazwa" jest nazwą elementu formularza, a "treść" jest wartością. Przykładowy kod podałeś staną:

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

mam tam też, ale niestety to nie działa, jeśli masz wielowymiarową tablicę params. Jedynym sposobem, mam go do pracy jest, jeśli wysłać form_paramaters jako parametry zapytań w tablicy:

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

Czy udało Ci się z powodzeniem użyć tej mieszanki RequestOptions? Kiedy wykonuję tę prośbę, moje elementy zapytania zostaną wysłane, ale wieloczęściowy nie. – Brady

+0

Według opiekuna Guzzle nie może to działać. Multipart nie może być łączony z żadną inną opcją żądania. https://github.com/guzzle/guzzle/issues/1386 – Brady

+0

Korekta. To powinno działać, ponieważ zapytanie nie jest opcją związaną z ciałem. – Brady

1

Według oficjalnej dokumentacji, multipart i form_params opcje nie mogą być używane w tym samym czasie. Musisz użyć jednego lub drugiego.

Użyj form_params dla żądań aplikacji/x-www-urlencoded i multipart dla żądań wielostronicowych/danych formularzy.

Powiązane problemy