3

我尝试使用 PHP 将大文件上传到 Amazon s3。我在各种论坛上找到了不错的解决方案,但这些解决方案适用于 SDK 版本 1 。

http://docs.aws.amazon.com/AmazonS3/latest/dev/LLuploadFilePHP.html

当然,我在Amazon API 文档中找到了示例。此示例需要本地磁盘上的文件,并且无法处理输入流

如第一个链接所示,我找不到适用于 PHPv2 的 SDK 的类似示例。

有人成功解决了类似的问题吗?

4

1 回答 1

4

我最近刚刚为此准备了一个代码示例。在此示例中,我使用的是文件,但您也可以使用流。

use Aws\S3\S3Client;
use Aws\Common\Enum\Size;

// Instantiate the client.
$s3 = S3Client::factory(array(
    'key'    => '*** your-aws-access-key-id ***',
    'secret' => '*** your-aws-secret-key ***'
));

$file = fopen($filename, 'r');

// 1. Create a new multipart upload and get the upload ID.
$response = $s3->createMultipartUpload(array(
    'Bucket' => $bucket,
    'Key'    => $keyname
);
$uploadId = $result['UploadId'];

// 2. Upload the data in parts.
$parts = array();
$partNumber = 1;
while (!feof($file)) {
    $result = $s3->uploadPart(array(
        'Bucket'     => $bucket,
        'Key'        => $key,
        'UploadId'   => $uploadId,
        'PartNumber' => $partNumber,
        'Body'       => fread($file, 5 * Size::MB),
    ));
    $parts[] = array(
        'PartNumber' => $partNumber++,
        'ETag'       => $result['ETag'],
    );
}

// 3. Complete multipart upload.
$result = $s3->completeMultipartUpload(array(
    'Bucket'   => $bucket,
    'Key'      => $key,
    'UploadId' => $uploadId,
    'Parts'    => $parts,
));
$url = $result['Location'];

fclose($file);
于 2013-06-27T21:29:16.077 回答