Laravel / S3: загрузка выбранных файлов в виде zip-файла из корзины S3, где облачный фронт настраивается в политике корзины - PullRequest
0 голосов
/ 15 апреля 2020

Итак, вот пример использования, над которым я работаю и не могу понять, у меня есть корзина s3, настроенная с доступом publi c, и я хочу загрузить из нее выбранные файлы

        use ZipStream\ZipStream;
        use ZipStream\Option\Archive as ArchiveOptions;


        $fileName = $material->material_title. ".zip";
        $names = json_decode($material->material_file, true);

        return response()->stream(function () use ($names, $folder, $fileName) {

            $opt = new ArchiveOptions();
            header("Content-Type: application/force-download");
            header("Content-encoding: gzip");

            header("Content-Disposition: attachment; filename=" . $fileName . ".zip");
            $opt->setContentType('application/force-download');
            $zip = new ZipStream( $fileName,$opt);

            foreach ($names as $name) {
                $path = $folder . $name;
                $file = \Storage::disk("s3")->read($path);
                $zip->addFile($name, $file);
            }

            $zip->finish();



        });

До некоторой степени все работало нормально, пока я не настроил облачный фронт с моим контейнером

{
"Version": "2008-10-17",
"Id": "PolicyForCloudFrontPrivateContent",
"Statement": [
    {
        "Sid": "2",
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E10DPSE8MHJ2AG"
        },
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::midad/*"
    }
  ]
}

Теперь я не могу загружать файлы непосредственно из корзины

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

Помощь очень ценится

...