HttpGuzzle 6, Опубликовать запрос с данными и файлом - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь POST запрос с файлом и некоторыми полями, прежде чем я использовал v3 из Guzzle http и ниже код работал,

        $client = Client();
        $request = $client->request('POST', $url, ['headers' => ['Authorization' => 'auth_trusted_header')]]);

        /** @var \GuzzleHttp\Post\PostBody $body */
        $body = $request->getBody();
        $body->setField('authorId', $user->getId());
        $body->setField('context', 'avatar');
        $body->addFile(
            new PostFile(
                'file',
                fopen('data://text/plain;base64,'.$avatar, 'r'),
                $user->getId().'.png'
            )
        );
        try {
            $response = $client->send($request);
        } catch (\Exception $e) {
            $response = false;
        }

После обновления до V6 я обновляю приведенный ниже код, но почему-то он не работает ....

use GuzzleHttp\Client;
use GuzzleHttp\Exception\ClientException;
use GuzzleHttp\Exception\GuzzleException;
use GuzzleHttp\Psr7\Request as GuzzleRequest;

        $client = new Client();
        $request = new GuzzleRequest('POST', $url, $this->genHeadersSettings(),
            [
                'multipart' => [
                    [
                        'Content-type' => 'multipart/form-data',
                        'name' => 'file',
                        'contents' => fopen('data://text/plain;base64,'.$avatar, 'r'),
                        'filename' => $user->getId().'.png',
                    ]
                ],
                'form_params' => [
                    'authorId' => $user->getId(),
                    'context' => 'avatar',
                    ]
            ]
        );

Выше кода выдает ошибку, что Invalid resource type: array ...

Есть решение?

1 Ответ

0 голосов
/ 06 мая 2019

В этом случае вы, скорее всего, не хотите использовать интерфейс PSR-7, поскольку вы конвертируете из старой версии Guzzle. Возможно, вам нужен метод $client->request(), который в основном совместим со старым стилем запроса Guzzle, включая многостраничный пост, который вы пытаетесь здесь (см. http://docs.guzzlephp.org/en/stable/quickstart.html#post-form-requests).

Если вы настаиваете на переключении на интерфейс PSR-7, то вам нужно передать объект Psr\Http\Message\StreamInterface или что-то, что может быть преобразовано в поток (например, в строку), а не в массив. Это ошибка, которую вы получаете.

...