Как отправить файл методом PUT в Guzzle 6?

281
27 сентября 2017, 11:53

Как отправить PUT запрос с файлом в Guzzle. На curl все должно выполняться таким запросом:

$ curl -i -XPUT {storage_url}/new_container/new_object \    -H "X-Auth-Token: $ \    -H "X-Delete-After: 100" \    -T "./example.gz"

Как выполнить этот запрос в Guzzle?

Пробовал

$fp = fopen($localFilePath,'r');
$client->request('PUT', $url, [
    'headers' => [
        'X-Auth-Token'=>$token,
        'X-Delete-After'=>100,
    ],
    'curl' => [
        CURLOPT_INFILE => $fp,
        CURLOPT_FILESIZE => filesize($localFilePath),
    ]
]);
fclose($fp);

Файл создается, но его размер 0 байт, т.е. запрос сервер принял и обработал, но содержимое файла не отправлено.

Answer 1

У меня работает так:

  • сначала инициализирую Guzzle таким способом

    use GuzzleHttp\Client;
     class Guzzle extends Client {
      public function init()
      {
        return new Client([
            'base_uri'=>'https://some_uri/api/',
            'headers'=>[
                'Authorization'=>'Token 000000-0000-0000-000000',
                'X-Vendor-ID'=>'API'
            ]
        ]);
      }
    }
    $this->guzzle = Guzzle::init();
    
    • потом делаю запрос в Guzzle с отправкой файла

      $response = $this->guzzle->request('PUT', 'files', ['multipart'=>[[ /*files прибавляется к base_uri т.е. адрес запроса = https://some_uri/api/files*/
        'name'=>$file_name,
        'contents'=>fopen($file,'r')    
      ]]]);
      
Answer 2

В параметр body передаем дескриптор файла

$fp = fopen($localFilePath,'r');
$client->request('PUT', $url, [
    'headers' => [
        'X-Auth-Token'=>$token,
        'X-Delete-After'=>100,
    ],
    'body' => $fp,
]);
fclose($fp);
READ ALSO
Перекодировать слово

Перекодировать слово

Добрый день, я новичок, у меня есть код, который подключается к LDAP и берет оттуда данные и отображает в браузереНо как только натыкается на русские...

255
Некорректная пагинация в Opencart

Некорректная пагинация в Opencart

В пагинации на страницах отображаются дубли страниц

282
Yii2, нужна помощь в написании метода для api

Yii2, нужна помощь в написании метода для api

Есть модели StickerPack и StickerМежду ними связь один ко многим

200