В AWS S3 Bucket Загрузка изображений в виде 0 байтов

Я пытаюсь загрузить изображения в ведро AWS s3, но всегда загружаю 0 байт в ведро.

Я действительно не знаю, почему так происходит.

Кто-нибудь здесь столкнулся с той же проблемой

Вот снимок изображения и кода https://www.awesomescreenshot.com/image/3369121/5ac921c28f569f45d1b51ac2ce7b6da1

use Aws\S3\S3Client;



public function aws_upload(){

            require 'vendor/autoload.php';
            if (isset($_FILES["left_front"]) && $_FILES["left_front"]["error"] == 0){
                        $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
                        $filename = $_FILES["left_front"]["name"];
                        $filetype = $_FILES["left_front"]["type"];
                        $filesize = $_FILES["left_front"]["size"];
            }

            // Instantiate an Amazon S3 client.

            $s3 = new S3Client([
                'version' => 'latest',
                'region'  => AWS_REGION,
                'credentials' => [
                    'key'    => ACCESS_KEY_ID,
                    'secret' => SECRET_ACCESS_KEY
                ]
            ]);
            $bucketName = 'demokrishna';
            $key = basename($filename);
            try {
                $result = $s3->putObject([
                    'Bucket' => $bucketName,
                    'Key'    => $key,
                    'acl'   => 'public-read'
                  //  'ACL'    => 'public-read',
                ]);
                echo $result->get('ObjectURL');

            } catch (Aws\S3\Exception\S3Exception $e) {
                echo "There was an error uploading the file.\n";
                echo $e->getMessage();
            }
        }

Проверьте Content-Type в заголовках HTTP - убедитесь, что он правильный.

snack_overflow 21.05.2018 11:56

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

jarmod 21.05.2018 13:08

Хорошо, спасибо за ответ @jarmod. Если я загружаю изображение, что я должен указать в разделе тела?

Krishna Ballabh Gupta 21.05.2018 13:27

@snack_overflow Я проверил правильность заголовков http в данных формы с помощью почтальона.

Krishna Ballabh Gupta 21.05.2018 13:28
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
4
2 278
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы предоставили сегмент, ключ и ACL, но не предоставили содержимое файла. Вы можете сделать это с помощью Body или SourceFile.

Пример с телом:

$result = $s3Client->putObject([
    'Bucket'     => $bucket,
    'Key'        => $key,
    'Body'       => 'Hello world!',
    'ACL'        => 'public-read'
]);

Пример с SourceFile:

$file_Path = 'folder/filename.jpg';

$result = $s3Client->putObject([
    'Bucket'     => $bucket,
    'Key'        => $key,
    'SourceFile' => $file_Path,
    'ACL'        => 'public-read'
]);

Также обратите внимание, что это «ACL», а не «acl». Пожалуйста, прочтите документация putObject.

$key_bucket = basename($filename);
    $result = $s3->putObject([
                                'Bucket' => $bucketName, // bucketname
                                'Key'    => $key_bucket, 
                                'StorageClass' => 'REDUCED_REDUNDANCY',
                                'SourceFile' => $value['tmp_name'] //temporary path

                            ]);

Меня устраивает

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