2012-07-18 134 views
1

我目前正在爲我的網站編寫一個後端頁面,以允許管理員間接編輯數據庫條目並上傳照片。我使用Amazon S3來託管圖像以便加載速度更快,因此,當我上傳圖像時,我必須先將它們上傳到服務器,然後從那裏將它們發送到亞馬遜服務器。圖像正確地上傳到服務器,但他們沒有正確地進入亞馬遜的服務器。當我嘗試訪問亞馬遜副本時,它似乎不存在。這裏是我用來上傳圖片的代碼:亞馬遜S3圖像無法正確上傳

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

我的錯誤的例子。 The local working copythe Amazon copy.我從來沒有和亞馬遜合作過,所以我不知道問題是什麼,如何弄清楚它是什麼,或者如何解決它。任何這3點的幫助將不勝感激。

+0

如果,你的'putObject'電話之後,你可以調用像'回聲$ S3->的getObject(「media.completeset.com/images/items/{$ ITEM_ID } _nsa.jpg「);'? – Viccari 2012-07-18 19:59:50

回答

1

如果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" 
    ) 
); 
+0

該文件現在顯示!自從我在很多例子中看到它之後,我應該已經想通了。 – jaimerump 2012-07-18 20:44:03