Принудительная загрузка файла, прочитанного Flysystem из AWS S3

Доброе утро всем,

Мой вопрос прост, я использую Flysystem (на Symfony) для восстановления ресурса из S3 (через DigitalOcean). Я хотел бы иметь возможность вернуть его для загрузки пользователю. Вот мой код:

    $client = new S3Client([
        'credentials' => [
            'key'    => '',
            'secret' => '',
        ],
        'region' => '',
        'version' => 'latest',
        'endpoint' => 'https://ams3.digitaloceanspaces.com',
    ]);

    $adapter = new AwsS3Adapter($client, '');

    $filesystem = new Filesystem($adapter);
    $filename = 'file.png';
    $stream = $filesystem->readStream('file.png');
    $contents = stream_get_contents($stream);
    fclose($stream);

    $response = new Response($stream);
    $disposition = $response->headers->makeDisposition(
        ResponseHeaderBag::DISPOSITION_ATTACHMENT,
        $filename
    );
    $response->headers->set('Content-Disposition', $disposition);

    return $response;

=> Файл поврежден ...

Любые идеи? Большое спасибо за вашу помощь. Гийом

ОБНОВИТЬ Когда я проверяю текстовый файл, я получаю его содержимое, но с заголовком:

HTTP/1.1 200 OK
Date: Thu, 27 Sep 2018 06:59:35 GMT
Server: Apache/2.4.29 (Ubuntu)
Vary: Authorization,Accept-Encoding
Cache-Control: no-cache, private
Content-Disposition: attachment; filename=toto.png
Link: <http://localhost/api/public/api/docs.jsonld>; rel = "http://www.w3.org/ns/hydra/core#apiDocumentation"
Content-Length: 517
Content-Type: text/html; charset=UTF-8

Есть идеи загрузить только содержимое файла и для всех типов файлов? Большое спасибо за всех, Гийом

файл закачивается? Возможно, придется добавить процесс блокировки, чтобы убедиться, что файл загружен, прежде чем продолжить.

Banjo Obayomi 26.09.2018 19:05

Просто так? $stream = $filesystem->readStream('sounds/toto.png');while (!feof($stream)) {echo fread($stream, 1024);}$contents = stream_get_contents($stream);fclose($stream); Лучше не работает :(

user5551022 26.09.2018 19:26

хм, может быть, дело в разрешениях? Попробуйте использовать общедоступное ведро, чтобы узнать, сможете ли вы получить файл, если это сработает, возможно, придется настроить ведро s3 для получения заранее заданного URL-адреса.

Banjo Obayomi 26.09.2018 19:49

Это странно, потому что я получаю правильные заголовки файлов (mp3, png и т. д.) И почти правильные размеры файлов. Мне действительно кажется, что он возвращает файлы, но они повреждены.

user5551022 26.09.2018 20:02

Я просто спросил и посмотрел их документацию, если возникла проблема с доступом к файлам, я должен получить сообщение об ошибке. Там у меня нет ошибок, данные есть, но повреждены. Я продолжаю искать ....

user5551022 26.09.2018 21:41

Что вы имеете в виду под словом «испорченный»?

mblaettermann 27.09.2018 03:22

@mblaettermann Я не могу открывать файлы загрузчика. Я проверял текстовый файл, он работает, но заголовок тоже загружается ..

user5551022 27.09.2018 08:55

Доброе утро всем, я обновил свой вопрос выше, все еще не могу правильно загрузить свои ресурсы с S3. Может у кого-то есть предложения по решению? Всем хорошего дня, Гийом

user5551022 28.09.2018 12:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
0
8
727
0

Другие вопросы по теме