0

私たちのアプリケーションでは、ユーザーはサイズが 1024 X 768 (約 150 KB) の画像をアップロードできます。
ユーザーが画像をアップロードすると、次のことが起こります。

1) 一時ディレクトリにアップロードされ
た画像 2) 画像を 4 つの異なるサイズにトリミングします。
3) 元の画像とそのトリミングされた画像を A​​mazon s3 サーバーにアップロードします。

上記のプロセスは、ユーザーにとって時間がかかることがわかります。

xdebug でプロファイリングした後、90% の時間が amazon s3 への画像のアップロードに費やされているようです。以下の方法を使用して、画像をAmazon 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');

そして、Amazon にアップロードするときは、「fileUpload」の代わりに「body」パラメータを使用する必要があります。

例:

    $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 に答える