0

在我们的应用程序中,允许用户上传尺寸为 1024 X 768(约 150 KB)的图像。
当用户上传图片时,会发生以下事情:

1)图像上传到临时目录
2)将图像裁剪成四种不同的尺寸。
3)在亚马逊s3服务器上上传原始图像及其裁剪图像。

上述过程证明对用户来说是耗时的。

在使用 xdebug 进行分析后,似乎 90% 的时间都花在了在 amazon 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;
}     

我也想过将图像直接上传到 amazon s3,但我不能这样做,因为我还必须将图像裁剪成 4 种不同的尺寸
如何加快或改进图像管理过程。

4

1 回答 1

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
                                        )
                                   );

我希望这会有所帮助。

于 2013-04-16T02:44:07.500 回答