Доброе утро всем,
Мой вопрос прост, я использую 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
Есть идеи загрузить только содержимое файла и для всех типов файлов? Большое спасибо за всех, Гийом
Просто так? $stream = $filesystem->readStream('sounds/toto.png');while (!feof($stream)) {echo fread($stream, 1024);}$contents = stream_get_contents($stream);fclose($stream); Лучше не работает :(
хм, может быть, дело в разрешениях? Попробуйте использовать общедоступное ведро, чтобы узнать, сможете ли вы получить файл, если это сработает, возможно, придется настроить ведро s3 для получения заранее заданного URL-адреса.
Это странно, потому что я получаю правильные заголовки файлов (mp3, png и т. д.) И почти правильные размеры файлов. Мне действительно кажется, что он возвращает файлы, но они повреждены.
Я просто спросил и посмотрел их документацию, если возникла проблема с доступом к файлам, я должен получить сообщение об ошибке. Там у меня нет ошибок, данные есть, но повреждены. Я продолжаю искать ....
Что вы имеете в виду под словом «испорченный»?
@mblaettermann Я не могу открывать файлы загрузчика. Я проверял текстовый файл, он работает, но заголовок тоже загружается ..
Доброе утро всем, я обновил свой вопрос выше, все еще не могу правильно загрузить свои ресурсы с S3. Может у кого-то есть предложения по решению? Всем хорошего дня, Гийом




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