我尝试使用 PHP 将大文件上传到 Amazon s3。我在各种论坛上找到了不错的解决方案,但这些解决方案适用于 SDK 版本 1 。
http://docs.aws.amazon.com/AmazonS3/latest/dev/LLuploadFilePHP.html
当然,我在Amazon API 文档中找到了示例。此示例需要本地磁盘上的文件,并且无法处理输入流。
如第一个链接所示,我找不到适用于 PHPv2 的 SDK 的类似示例。
有人成功解决了类似的问题吗?
我尝试使用 PHP 将大文件上传到 Amazon s3。我在各种论坛上找到了不错的解决方案,但这些解决方案适用于 SDK 版本 1 。
http://docs.aws.amazon.com/AmazonS3/latest/dev/LLuploadFilePHP.html
当然,我在Amazon API 文档中找到了示例。此示例需要本地磁盘上的文件,并且无法处理输入流。
如第一个链接所示,我找不到适用于 PHPv2 的 SDK 的类似示例。
有人成功解决了类似的问题吗?
我最近刚刚为此准备了一个代码示例。在此示例中,我使用的是文件,但您也可以使用流。
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);