2012-03-27 14 views
3

Ich baue gerade einen Zend Framework PHP Webservice, der ein Bild von Android-Handy hochgeladen, Größe ändert, und es in Amazon Web Services S3.Wie PHP-Bild-Ressource in Amazon Web Services zu setzen?

Hier sind meine Codes:

$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."); 
    } 

ich einen Weg, denke das Bild Ressource zu streamen, zu konvertieren, so kann ich $ S3-> putFileStream oder putObject Methode verwenden, aber ich kann eine gültige nicht gefunden Weg.

Irgendeine Idee ??

Antwort

2

Hier ist, wie Sie Ihr Bild in eine Variable erhalten werden, ohne eine Datei zu schreiben:

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

Wenn Sie den Inhalt der Datei in einer Variablen haben, können Sie putObject verwenden. Hier ist unser Beispiel, wo wir file_get_contents verwenden. Beachten Sie, dass wir alle S3-Pfade aus unserer Zend-Konfigurationsdatei entfernen.

$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

Sie rocken !! Es klappt! – VHanded

Verwandte Themen