1

私は現在、管理者がデータベースエントリを間接的に編集して写真をアップロードできるように、自分のサイトのバックエンドページのコーディングに取り組んでいます。私はAmazonS3を使用して画像をホストし、画像の読み込みを高速化しています。そのため、画像をアップロードするときは、最初に画像をサーバーにアップロードしてから、そこからAmazonサーバーに送信する必要があります。画像はサーバーに正しくアップロードされていますが、Amazonのサーバーに正しく到達していません。Amazonのコピーにアクセスしようとすると、存在しないようです。画像のアップロードに使用しているコードは次のとおりです。

//Set up image validator
$upload = new Zend_File_Transfer();
$upload->addValidator('ImageSize', false, array('minwidth'  => 100,
                                                  'maxwidth'  => 1000,
                                                  'minheight' => 100,
                                                  'maxheight' => 1000), 'image')
       ->addValidator('Extension', false, 'jpg')
       ->addValidator('Count', false, array('min'=>0, 'max'=>2));

//Set up Amazon class
$s3 = new Zend_Service_Amazon_S3($my_aws_key, $my_aws_secret_key);

if($upload->isUploaded('image')){ //Pic was uploaded
    if($upload->isValid('image')){ //Pic is valid
        echo "Pic provided is valid.";          
        $upload->addFilter('Rename',array('target'=>BASE_PATH . "/public_html/items/{$item_id}_nsa.jpg",'overwrite'=>true));
        $upload->receive();
        $pic = BASE_PATH . "/public_html/items/{$item_id}_nsa.jpg";
        try{
            $s3->putObject("media.completeset.com/images/items/{$item_id}_nsa.jpg", $pic,
                                        array(Zend_Service_Amazon_S3::S3_ACL_HEADER => Zend_Service_Amazon_S3::S3_ACL_PUBLIC_READ,
                                              Zend_Service_Amazon_S3::S3_CONTENT_TYPE_HEADER => "image/jpeg"));
            echo "Pic is uploaded.";
        }
        catch(Exception $e){
            echo "Exception: ".$e->getMessage();
        }
    }
    else{
        echo "Pic is invalid.";
    }
}
else{
    echo "Pic isn't uploaded";
} 

そして私のエラーの例。ローカル作業コピーAmazonコピー。私はこれまでAmazonと仕事をしたことがないので、問題が何であるか、それが何であるかを理解する方法、またはそれを解決する方法がわかりません。これらの3つのポイントのいずれかに関する助けをいただければ幸いです。

4

1 に答える 1

1

put操作が失敗した場合は、例外が発生しているはずです。例外が何であるかを知らなければ、問題を解決することは困難です。

私が見ることができる問題の少なくとも1つは、putObject()がデータが文字列(blob)またはリソースであることを期待していることです。おそらくこれでうまくいくでしょう:

$s3->putObject(
    "media.completeset.com/images/items/{$item_id}_nsa.jpg", 
    file_get_contents($pic),
    array(
      Zend_Service_Amazon_S3::S3_ACL_HEADER => Zend_Service_Amazon_S3::S3_ACL_PUBLIC_READ,
      Zend_Service_Amazon_S3::S3_CONTENT_TYPE_HEADER => "image/jpeg"
    )
);
于 2012-07-18T20:08:34.093 に答える