2014-07-14 140 views
0

我正在使用Guzzle 4,我想使用multipart/form-data發佈文件。我不確定哪個是正確的做法。POST multipart/form-data with Guzzle 4

我已經試過:

$client = new GuzzleHttp\Client(); 

$request = $client->createRequest('POST', 'https://127.0.0.1/1/files/', ['json' => ['id' => 'dc51bfe4-92af-483d-80c4-f2da4cafa723'], 'cookies' => true]); 

$request->getBody()->addFile(new PostFile('a.pdf', fopen('a.pdf', 'rb'))); 
$response = $this->client->send($request); 

我得到這個錯誤:

Fatal error: Call to undefined method GuzzleHttp\Stream\Stream::addFile() 

同樣的情況,如果我addPostFile取代addFile。

任何想法?

回答

1

從未使用過狂飲,但我想這個代碼並能夠由與此

$request = $client->createRequest('POST', 'https://127.0.0.1/1/files/', ['cookies' => true]); 

更換

$request = $client->createRequest('POST', 'https://127.0.0.1/1/files/', ['json' => ['id' => 'dc51bfe4-92af-483d-80c4-f2da4cafa723'], 'cookies' => true]); 

您可以在之後的createRequest傳遞可能JSON數據來修復它。你應該檢查Guzzle文檔。

此外,你似乎同時使用$client$this->client。我想你可能應該堅持兩個之一。

+0

啊謝謝。但之後我無法找到如何傳遞json數據。我發現setBody(),但這是Guzzle v3,而不是v4。 –

+0

我不是100%確定你需要做什麼。我覺得你想發佈JSON數據(可能是application/json content-type)和一個文件(可能是multipart/form-data content-type)有點奇怪。我想你可能只需要使用'$ request-> getBody() - > setFields'來傳遞id字段 – Maury