【问题标题】:Setting Storage class on Amazon s3 upload (ver 3)在 Amazon s3 上传上设置存储类(版本 3)
【发布时间】:2017-05-09 04:46:04
【问题描述】:

我不知道如何将此上传设置为“减少冗余”

我在其中添加了两次,但它什么也没做。我觉得我申请的方式没用。

我想我需要使用这条线,但似乎我需要重建它?

setOption('StorageClass', 'REDUCED_REDUNDANCY')

require_once __DIR__ .'/vendor/autoload.php';

$options = [
    'region' => $region,
    'credentials' => [
        'key' => $accessKeyId,
        'secret' => $secretKey
    ],
    'version' => '2006-03-01',
    'signature_version' => 'v4',
    'StorageClass' => 'REDUCED_REDUNDANCY',
];

$s3Client = new \Aws\S3\S3Client($options);

$uploader = new \Aws\S3\MultipartUploader($s3Client, $filename_dir , [
    'bucket' => $bucket,
    'key'    => $filename,
    'StorageClass' => 'REDUCED_REDUNDANCY',
]);

try {
    $result = $uploader->upload();
    echo "Upload complete: {$result['ObjectURL']}\n";
} catch (\Aws\Exception\MultipartUploadException $e) {
    echo $e->getMessage() . "\n";
}

【问题讨论】:

    标签: php amazon-web-services amazon-s3 upload


    【解决方案1】:

    Reduced Redundancy Storage 过去的成本降低了大约 20%,以换取只存储 2 个数据副本而不是 3 个副本(1 个冗余副本而不是 2 个冗余副本)。

    但是,随着 2016 年 12 月 Amazon S3 的定价变化,使用减少冗余存储不再有益

    在美国地区使用pricing

    因此,RRS 现在比标准存储更昂贵。现在选择标准或标准不频繁访问更便宜。

    【讨论】:

      【解决方案2】:

      这样设置“StorageClass”是行不通的。

      $s3Client = new \Aws\S3\S3Client($options);
      

      由于 StorageClass 仅在上传对象时设置,因此您不能在 SDK 初始化期间将所有请求默认为特定配置。每个单独的 PUT 请求都必须为其指定自己的选项。

      要使用您提到的“SetOption”行,您可能需要更新您的代码以遵循 AWS PHP SDK 文档中的以下示例。

      Using the AWS PHP SDK for Multipart Upload (High-Level API) Documentation

      The following PHP code sample demonstrates how to upload a file using the high-level UploadBuilder object.
      
      <?php
      
      // Include the AWS SDK using the Composer autoloader.
      require 'vendor/autoload.php';
      
      use Aws\Common\Exception\MultipartUploadException;
      use Aws\S3\Model\MultipartUpload\UploadBuilder;
      use Aws\S3\S3Client;
      
      $bucket = '*** Your Bucket Name ***';
      $keyname = '*** Your Object Key ***';
      
      // Instantiate the client.
      $s3 = S3Client::factory();
      
      // Prepare the upload parameters.
      $uploader = UploadBuilder::newInstance()
          ->setClient($s3)
          ->setSource('/path/to/large/file.mov')
          ->setBucket($bucket)
          ->setKey($keyname)
          ->setMinPartSize(25 * 1024 * 1024)
          ->setOption('Metadata', array(
              'param1' => 'value1',
              'param2' => 'value2'
          ))
          ->setOption('ACL', 'public-read')
          ->setConcurrency(3)
          ->build();
      
      // Perform the upload. Abort the upload if something goes wrong.
      try {
          $uploader->upload();
          echo "Upload complete.\n";
      } catch (MultipartUploadException $e) {
          $uploader->abort();
          echo "Upload failed.\n";
          echo $e->getMessage() . "\n";
      }
      

      所以在这种情况下你需要添加'StorageClass'如下,位置并不重要,只需要使用setOption来设置它:

      ->setOption('ACL', 'public-read')
      ->setOption('StorageClass', 'REDUCED_REDUNDANCY')
      ->setConcurrency(3)
      ->build();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-12
        • 1970-01-01
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        • 2021-10-18
        相关资源
        最近更新 更多