图像上传管理在PHP中

时间:2013-02-20 06:31:15

标签: php image-processing amazon-s3

在我们的应用程序中,允许用户上传尺寸为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种不同的尺寸
如何加快或改善图像管理流程。

1 个答案:

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

我希望有所帮助。