在 Amazon s3 上传(版本 3)上设置存储 class

Setting Storage class on Amazon s3 upload (ver 3)

我不知道如何将此上传作为 'reduced redundancy'

我在那里添加了两次,但没有任何作用。我认为我申请的方式没有用。

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

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";
}

像这样设置"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();

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

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

使用来自美国地区的 pricing

因此,RRS 现在比标准存储更昂贵。现在选择 Standard 或 Standard-Infrequent Access 更便宜。