2012-03-27 5 views
3

В настоящее время я создаю веб-службу Zend Framework PHP, которая загружает изображение с телефона Android, изменяет его размер и помещает в Amazon Web Services S3.Как разместить ресурс изображения PHP в веб-сервисах Amazon?

Вот мои коды:

$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. Обратите внимание, что мы получаем все пути S3 из нашего конфигурационного файла Zend.

$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

Смежные вопросы