URL-адрес AWS S3 отличается от исходного - PullRequest
0 голосов
/ 22 февраля 2019

Я загружаю файлы с php на aws s3.Я успешно загрузил файл.

URL-адрес, который он возвращает: => https://BUCKETNAME.s3.ap -south-1.amazonaws.com / images1740 / 1550830121572.jpg

Фактический URL-адрес: => https://s3.ap -south-1.amazonaws.com / BUCKETNAME / images1740 / 1550830121572.jpg (имя сегмента начинается с начала в конце URL-адреса)

Из-за этого выдает ошибку при загрузке изображений => «Указанный ключ не найден»

$source = $source;
$bucket = 'xxxxxxxxxxxxxxxxx';
$keyname = 'images'.$usr_id."/".$name;

// for push

$s3 = S3Client::factory(
    array(
        'credentials' => array(
            'key'    => "xxxxxxxxxxxxxx",
            'secret' => "xxxxxxxxxxxxxxx"
        ),
        'version' => 'latest',
        'region'  => 'ap-south-1'
    )
);

try {
    // Upload data.
    $result = $s3->putObject(array(
        'Bucket' => $bucket,
        'Key'    => $keyname,
        'SourceFile' => $source,
        'ServerSideEncryption' => 'AES256',
    ));

    // Print the URL to the object.
    print_r($result);
    return $result['ObjectURL'] . PHP_EOL;
    // print_r($result);
} catch (S3Exception $e) {
    echo $e->getMessage() . PHP_EOL;
}

1 Ответ

0 голосов
/ 22 февраля 2019

Установите use_path_style_endpoint в значение true при инициализации клиента S3, чтобы он использовал конечную точку стиля пути S3 по умолчанию при создании URL-адреса объекта. 1

В деталях реализации указан URL-адрес объекта в стиле пути, если имя сегмента задает допустимое имя домена, в противном случае оно возвращается к стилю пути S3.
Вы хотите, чтобы последующее поведение оставалось все время.

$s3 = S3Client::factory(
    array(
        'credentials' => array(
            'key'    => "xxxxxxxxxxxxxx",
            'secret' => "xxxxxxxxxxxxxxx"
        ),
        'use_path_style_endpoint' => true,
        'version' => 'latest',
        'region'  => 'ap-south-1'
    )
);

Вы также можете сделать, как показано ниже, если вы хотите отключить его один раз для операции PutObject.

$result = $s3->putObject(array(
    'Bucket' => $bucket,
    'Key'    => $keyname,
    'SourceFile' => $source,
    'ServerSideEncryption' => 'AES256',
    '@use_path_style_endpoint' => true
));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...