2016-05-25 8 views
5

Potrzebuję przesłać pliki przez Rest, a także wysłać niektóre konfiguracji z nim.HTTPful dołączyć plik i json-body w jednym żądaniu

Oto mój przykładowy kod:

$this->login(); 
$files = array('file'=>'aTest1.jpg'); 
$data = 
    array(
     'name'=>'first file', 
     'description'=>'first file description', 
     'author'=>'test user' 
    ); 
$response = Request::post($this->getRoute('test')) 
    ->addHeader('Authorization', "Bearer " . $this->getToken()) 
    ->attach($files) 
    ->body(json_encode($data)) 
    ->sendsJson() 
    ->send(); 

Jestem w stanie wysłać plik lub stanie wysłać ciało. Ale to nie działa, jeśli próbuję z obu ...

Dowolna wskazówka dla mnie?

Pozdrowienia n00n

+0

Mam dokładnie ten sam problem. Czy kiedykolwiek zastanawiałeś się, jak to zrobić? – jjwdesign

+0

Nie należy używać mocowania ani karoserii. Zauważyłem, że jedno usunie drugie. Zamiast tego po prostu użyj metody body(). Użyj file_get_contents(), aby uzyskać dane binarne dla twojego pliku, a następnie base64_encode() te dane i umieść je w $ danych jako parametr. Powinien działać z JSON. Podejście to działało dla mnie z mime typu application/x-www-form-urlencoded. – jjwdesign

Odpowiedz

4

Dla osób przybywających do tej strony przez Google. Oto podejście, które zadziałało dla mnie.

Nie używaj razem funkcji attach() i body(). Zauważyłem, że jedno usunie drugie. Zamiast tego po prostu użyj metody body(). Użyj file_get_contents(), aby uzyskać dane binarne dla twojego pliku, a następnie base64_encode() te dane i umieść je w $ danych jako parametr.

Powinien działać z JSON. Podejście to działało dla mnie z mime typu application/x-www-form-urlencoded, używając $ req- body (http_build_query ($ data)).

$this->login(); 
$filepath = 'aTest1.jpg'; 
$data = 
    array(
     'name'=>'first file', 
     'description'=>'first file description', 
     'author'=>'test user' 
    ); 
$req = Request::post($this->getRoute('test')) 
    ->addHeader('Authorization', "Bearer " . $this->getToken()); 

if (!empty($filepath) && file_exists($filepath)) { 
    $filedata = file_get_contents($filepath); 
    $data['file'] = base64_encode($filedata); 
} 

$response = $req 
    ->body(json_encode($data)) 
    ->sendsJson(); 
    ->send(); 
3

metoda body() kasuje payload treści, więc po wywołaniu attach() należy wypełnić payload siebie:

$request = Request::post($this->getRoute('test')) 
    ->addHeader('Authorization', "Bearer " . $this->getToken()) 
    ->attach($files); 
foreach ($parameters as $key => $value) { 
    $request->payload[$key] = $value; 
} 
$response = $request 
    ->sendsJson(); 
    ->send(); 
Powiązane problemy