Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何更新AWS S3存储桶中的对象属性_Php_Amazon S3 - Fatal编程技术网

Php 如何更新AWS S3存储桶中的对象属性

Php 如何更新AWS S3存储桶中的对象属性,php,amazon-s3,Php,Amazon S3,我已经上传了近25k个文件——大型媒体文件——到s3存储桶中。我使用AWS SDK2 for PHP S3Client::putObject执行上传。现在,我需要更新这些文件的元数据,即将ContentDisposition更改为attachment并分配文件名 有没有一种方法可以在不需要重新上传文件的情况下执行此操作?请提供帮助。是的,您可以使用,其中您将CopySource参数设置为Bucket和Key参数 例如: // setup your $s3 connection, and defi

我已经上传了近25k个文件——大型媒体文件——到s3存储桶中。我使用AWS SDK2 for PHP S3Client::putObject执行上传。现在,我需要更新这些文件的元数据,即将ContentDisposition更改为attachment并分配文件名

有没有一种方法可以在不需要重新上传文件的情况下执行此操作?请提供帮助。

是的,您可以使用,其中您将CopySource参数设置为Bucket和Key参数

例如:

// setup your $s3 connection, and define the bucket and key for your resource.
$s3->copyObject(array(
  'Bucket' => $bucket,
  'CopySource' => "$bucket/$key",
  'Key' => $key,
  'Metadata' => array(
    'ExtraHeader' => 'HEADER VALUE'
  ),
  'MetadataDirective' => 'REPLACE'
));
是的,您可以使用,其中您将CopySource参数设置为Bucket和Key参数

例如:

// setup your $s3 connection, and define the bucket and key for your resource.
$s3->copyObject(array(
  'Bucket' => $bucket,
  'CopySource' => "$bucket/$key",
  'Key' => $key,
  'Metadata' => array(
    'ExtraHeader' => 'HEADER VALUE'
  ),
  'MetadataDirective' => 'REPLACE'
));

更新S3对象上的缓存控制元数据

<?php
define('S3_BUCKET', 'bucket-name');
define('S3_ACCESS_KEY', 'your-access-key');
define('S3_SECRET_KEY', 'secret-key');
define('S3_REGION', 'ap-south-1'); //Mumbai

require 'vendors/aws/aws-autoloader.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

try {
    $s3 = S3Client::factory(array(
                'version' => 'latest',
                'region' => S3_REGION,
                'credentials' => array(
                    'secret' => S3_SECRET_KEY,
                    'key' => S3_ACCESS_KEY,
                )
    ));

    $objects = $this->s3->getIterator('ListObjects', array('Bucket' => S3_BUCKET));

    echo "Keys retrieved!\n";
    foreach ($objects as $object) {
        echo $object['Key'] . "\n";
        $s3->copyObject(array(
            'Bucket' => S3_BUCKET,
            'CopySource' => S3_BUCKET . '/' . $object['Key'],
            'Key' => $key,
            'ContentType' => 'image/jpeg',
            'ACL' => 'public-read',
            'StorageClass' => 'REDUCED_REDUNDANCY',
            'CacheControl' => 'max-age=172800',
            'MetadataDirective' => 'REPLACE'
        ));
    }
} catch (S3Exception $e) {
    echo $e->getMessage() . "\n";
}

更新S3对象上的缓存控制元数据

<?php
define('S3_BUCKET', 'bucket-name');
define('S3_ACCESS_KEY', 'your-access-key');
define('S3_SECRET_KEY', 'secret-key');
define('S3_REGION', 'ap-south-1'); //Mumbai

require 'vendors/aws/aws-autoloader.php';

use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

try {
    $s3 = S3Client::factory(array(
                'version' => 'latest',
                'region' => S3_REGION,
                'credentials' => array(
                    'secret' => S3_SECRET_KEY,
                    'key' => S3_ACCESS_KEY,
                )
    ));

    $objects = $this->s3->getIterator('ListObjects', array('Bucket' => S3_BUCKET));

    echo "Keys retrieved!\n";
    foreach ($objects as $object) {
        echo $object['Key'] . "\n";
        $s3->copyObject(array(
            'Bucket' => S3_BUCKET,
            'CopySource' => S3_BUCKET . '/' . $object['Key'],
            'Key' => $key,
            'ContentType' => 'image/jpeg',
            'ACL' => 'public-read',
            'StorageClass' => 'REDUCED_REDUNDANCY',
            'CacheControl' => 'max-age=172800',
            'MetadataDirective' => 'REPLACE'
        ));
    }
} catch (S3Exception $e) {
    echo $e->getMessage() . "\n";
}
试试这个

用于删除现有对象 用于检查对象 如果对象仍然存在,则返回true

$keyname = 'product-file/my-object1.dll';
try {
  $this->s3->getObject([
    'Bucket' => 'belisc',
    'Key'    => $keyname
  ]);

  return true;
} catch (S3Exception $e) {
  return $e->getAwsErrorMessage();
}
然后你可以上传新的 试试这个

用于删除现有对象 用于检查对象 如果对象仍然存在,则返回true

$keyname = 'product-file/my-object1.dll';
try {
  $this->s3->getObject([
    'Bucket' => 'belisc',
    'Key'    => $keyname
  ]);

  return true;
} catch (S3Exception $e) {
  return $e->getAwsErrorMessage();
}
然后你可以上传新的
你找到解决办法了吗?我所看到的唯一接近的是copyObject。@dsummersl是的,copyObject是我所知道的唯一出路。你找到解决办法了吗?我看到的唯一接近的是copyObject。@dsummersl是的,copyObject是我能说的唯一出路。我还没有尝试过CopySource。所以,我必须复制一份,然后删除旧的。我要试试这个。好的。最后,这里是我如何混合使用copyObject和deleteObject来实现这个目标的。1.将带有更新元标记的原始对象复制到临时文件夹。2.删除原件。3.将临时文件复制到原始位置。4.从临时位置删除副本。为了这么简单的事情付出了太多的努力。不幸的是,没有PHP SDK的替代方法。我还没有尝试CopySource。所以,我必须复制一份,然后删除旧的。我要试试这个。好的。最后,这里是我如何混合使用copyObject和deleteObject来实现这个目标的。1.将带有更新元标记的原始对象复制到临时文件夹。2.删除原件。3.将临时文件复制到原始位置。4.从临时位置删除副本。为了这么简单的事情付出了太多的努力。不幸的是,PHPSDK没有替代方法。它和当前答案有什么不同?它和当前答案有什么不同?