Laravel - Использование Stream с новым Http-клиентом - PullRequest
1 голос
/ 05 марта 2020

Я перевожу свою старую систему на новую версию Laravel, и у меня возникают проблемы с одним из моих запросов ...

В основном по этому запросу я получаю любой файл и просто пересылаю это пользователю. Вот старая версия с использованием Guzzle:

use Symfony\Component\HttpFoundation\StreamedResponse;

public function getMedia($media)
{
    try {
        $response = $this->client->get('media/' . $media, [
                'stream' => true
            ]
        );

        $contentType = $response->getHeader('Content-Type');

        $body = $response->getBody();

        $stream = new StreamedResponse(function () use ($body) {
            while (!$body->eof()) {
                echo $body->read(1024);
            }
        });

        $stream->headers->set('Content-Type', $contentType);

        return $stream;
    } catch (ClientException $e) {
        return response()->json([
            'errors' => json_decode($e->getResponse()->getBody()->getContents())->errors,
            'message' => 'Unfortunately we could not find the requested file'
        ], 404);
    }
}

И новый код, который я пытался написать, но безуспешно:

use Symfony\Component\HttpFoundation\StreamedResponse;

public function getMedia($media)
{
    $response = Http::withOptions([
        'stream' => true
    ])->get("media/{$media}");

    $contentType = $response->header('Content-Type');

    $body = $response->body();

    $stream = new StreamedResponse(function () use ($body) {
        while (!$body->eof()) {
            echo $body->read(1024);
        }
    });

    $stream->headers->set('Content-Type', $contentType);

    return $stream;
}

Кто-нибудь знает, как решить эту проблему? ? Я не знаю, что делать дальше ...

...