在我们的应用程序中,允许用户上传尺寸为1024 X 768(约150 KB)的图像 当用户在事情发生后上传图像时:
1)上传到临时目录的图像
2)将图像裁剪成四种不同的尺寸
3)将原始图像及其裁剪后的图像上传到amazon s3服务器上。
上述过程对用户而言非常耗时。
使用xdebug进行分析后,似乎有90%的时间是通过在亚马逊s3上传图像来消耗的。 我使用下面给出的方法来保存亚马逊s3桶中的图像
public function saveInBucket( $sourceLoc,$bucketName = '', $destinationLoc = '' ) {
if( $bucketName <> '' && $destinationLoc <> '' && $sourceLoc <> '') {
$s3 = new AmazonS3();
$response = $s3->create_object( $bucketName.'.xyz.com',$destinationLoc, array(
'contentType' => 'application/force-download',
'acl' => AmazonS3::ACL_PUBLIC,
'fileUpload' => $sourceLoc
)
);
if ( ( int ) $response->isOK() ) {
return TRUE;
}
$this->ErrorMessage = 'File upload operation failed,Please try again later';
return FALSE;
}
return FALSE;
}
我还想过将图像直接上传到亚马逊s3,但我不能这样做,因为我还需要将图像裁剪成4种不同的尺寸
如何加快或改善图像管理流程。
答案 0 :(得分:1)
之前发生在我身上。你能做的是:
调整图像大小时,必须转换为字符串。 我正在使用 WideImage 类。
示例:
$image = WideImage::load($_FILES["file"]['tmp_name']);
$resized = $image->resize(1024);
$data = $resized->asString('jpg');
然后当您在亚马逊上传时,您必须使用参数'body'而不是'fileUpload'。
示例:
$response = $s3->create_object( $bucketName.'.xyz.com',$destinationLoc, array(
'contentType' => 'application/force-download',
'acl' => AmazonS3::ACL_PUBLIC,
'body' => $data
)
);
我希望有所帮助。