亚马逊S3图片上传不正确


Amazon S3 images not uploading correctly

我目前正在为我的网站编写一个后端页面,允许管理员间接编辑数据库条目并上传照片。我使用AmazonS3来托管图像,以便更快地加载图像,所以当我上传图像时,我必须首先将它们上传到服务器,然后从那里将它们发送到亚马逊服务器。这些图像被正确地上传到服务器,但它们没有正确地到达亚马逊的服务器。当我尝试访问亚马逊副本时,它似乎不存在。这是我用来上传图像的代码:

//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";
} 

还有我错误的例子。本地工作副本和亚马逊副本。我以前从未与亚马逊合作过,所以我不知道问题是什么,如何弄清楚它是什么,也不知道如何解决它。如果能在这三点上提供任何帮助,我将不胜感激。

如果put操作失败,您应该会得到一个异常。如果不知道例外情况是什么,就很难解决这个问题。

我能看到的至少一个问题是,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"
    )
);