我正在尝试将许多图像上传到 S3 存储桶。考虑到速度,我希望通过将数据保存在内存中来减少磁盘读取和写入的次数。为此,我想出了以下方案:
//fetch binary image data from remote URL
$contents = file_get_contents("http://somesite.com/image.jpg");
//trim the image as per: http://stackoverflow.com/a/15104071/568884
$out = shell_exec('echo ' . base64_encode($contents) . " | base64 -d | convert - -fuzz 10% -trim jpeg:-");
//create a temporary resource to pass to S3's inputResource() method.
$resource = fopen('php://temp', 'r+');
//write the binary data into the empty resource.
fwrite($resource, $out);
//pass the resource and length of binary data into inputResource()
$ir = $this->s3->inputResource($resource, strlen($out));
//finally transfer the resource from machine to S3.
$this->s3->putObject($ir, $bucket, $s3_path, S3::ACL_PUBLIC_READ);
错误是:S3::putObject(): [RequestTimeout] 您与服务器的套接字连接未在超时期限内读取或写入。空闲连接将被关闭,数据不会写入 S3。
如果我将 $out 的分配简单地替换为一个空字符串:$out = "";
然后,该库按预期成功地将 0 字节文件写入 S3。
我正在使用CodeIgniter S3库......它只是 AWS S3 API afaik 的包装器。