PutObject в каталог Amazon s3/PHP
Мне нужно загрузить мои файлы в определенные каталоги, которые я создал на моем хранилище amazon s3. Я всегда загружал файлы на "абсолютном пути" моего ведра, делая что-то вроде этого:
$s3->putObject(array(
'Bucket' => $bucket,
'ContentType' => $mime,
'Key' => $localImage,
'ACL' => 'public-read',
'SourceFile' => $localImage,
'CacheControl' => 'max-age=172800',
"Expires" => gmdate("D, d M Y H:i:s T", strtotime("+5 years")),
'Metadata' => array(
'profile' => $localImage,
),
));
Как определить, где этот файл должен быть загружен в данный каталог?
Ответы
Ответ 1
Вы должны включить эту информацию в параметр "Ключ". S3 на самом деле не является файловой системой, он больше похож на большой (хэш-таблицу) ассоциативный массив. "Ведро" - это имя хеш-таблицы, а "ключ" - это ключ (например, $bucket[$key] = $content
). Таким образом, вся информация о пути/каталоге должна быть частью "ключа".
$localImage = '/Users/jim/Photos/summer-vacation/DP00342654.jpg';
$s3->putObject(array(
'Bucket' => 'my-uniquely-named-bucket',
'SourceFile' => $localImage,
'Key' => 'photos/summer/' . basename($localImage)
));
Ответ 2
спасибо Джереми Линдблом, это мой пример python, который работал у меня.
import boto3
s3 = boto3.resource('s3')
data = open('/home/briansanchez/www/red-hat.jpg', 'rb')
s3.Bucket('briansanchez').put_object(Key='www/red-hat.jpg', Body=data)
Ответ 3
Обновлен код в соответствии с последним SDK AWS: -
$result = $s3->putObject(array(
'Bucket' => 'bucket name of S3',
'Key' => 'pawan-trying',
'SourceFile' => 'local image path or document root image path ',
'ContentType' => 'image',
'ACL' => 'public-read',
'StorageClass' => 'REDUCED_REDUNDANCY',
'Metadata' => array(
'param1' => 'value 1',
'param2' => 'value 2'
)
));