2012-03-27 66 views
3

我目前正在構建一個Zend框架PHP Web服務,它將從Android手機上傳的圖像調整大小,並將其放入Amazon Web Services S3。如何將PHP圖像資源放入Amazon Web Services?

這裏是我的代碼:

$img = $_FILES['image']; 

    if(!$img) 
    { 
     return null; 
    } 

    if((($img['type'] == 'image/gif') || 
      ($img['type'] == 'image/jpeg') || 
      ($img['type'] == 'image/png')) && 
      ($img['size'] < 1048576)) 
    { 
     if($img['error'] >0) 
     { 
      throw new Exception("image contain error "); 
     } 


     $size24 = 24; 

     //obtain the auth settings 
     $bootstrap = $this->getInvokeArg('bootstrap'); 
     $awsConfigs = $bootstrap->getOption('aws'); 

     $s3 = new Zend_Service_Amazon_S3($awsConfigs['appkey'], $awsConfigs['secretkey']); 

     $bucketName = 'item'; 
     $folderName = 'image'; 

     $perms = array(
       Zend_Service_Amazon_S3::S3_ACL_HEADER => 
       zend_service_amazon_s3::S3_ACL_PUBLIC_READ 
     ); 


     $name = $bucketName.'/'. $folderName .'/'. uniqid() .'_'. Zend_Date::now()->toString('yyyyMMdd'); 
     $smallPath = $name . '_32.png'; 



     //resize and upload 24x24 image 
     $srcImg = imagecreatefrompng($img['tmp_name']); 
     $tmp = imagecreatetruecolor($size24, $size24); 
     list($oriWidth, $oriHeight) = getimagesize($img['tmp_name']); 
     imagecopyresampled($tmp, $srcImg, 0, 0, 0, 0, $size24, $size24, $oriWidth, $oriHeight); 
     //not working 
        imagepng($tmp, "tmp_32.png") 
     $smallret = $s3->putFile("tmp_32.png", $smallPath, $perms); 

     imagedestroy($tmp); 
     imagedestroy($srcImg); 

    } 
    else 
    { 
     throw new Exception("image size/format not qualified."); 
    } 

我想辦法到圖像資源流轉,這樣我就可以使用$ S3-> putFileStream或putObject方法,但我不能找到有效的辦法。

任何想法??

回答

2

這裏是你如何讓你的形象到一個變量,而無需編寫一個文件:

ob_start(); 
imagepng($image); 
$image_data = ob_get_contents(); 
ob_end_clean(); 

如果你有一個變量的文件內容,你可以使用putObject。這裏是我們使用file_get_contents的例子。請注意,我們正在從我們的Zend配置文件中獲取所有S3路徑。

$image_data = file_get_contents(<filename>); 
$aws_accesskey = Zend_Registry::get('config')->amazon->accesskey; 
$aws_secret = Zend_Registry::get('config')->amazon->secret; 
$s3 = new Zend_Service_Amazon_S3($aws_accesskey, $aws_secret); 
$image_path = Zend_Registry::get('config')->amazon->s3->assetsbucket . "/images/$filename"; 
$s3->putObject($image_path, $image_data, array(Zend_Service_Amazon_S3::S3_ACL_HEADER => Zend_Service_Amazon_S3::S3_ACL_PUBLIC_READ)); 
    } 
+0

你搖滾!有用! – VHanded 2012-03-28 02:27:41

相關問題