如何将PHP图像资源放入AmazonWeb服务?

如何将PHP图像资源放入AmazonWeb服务?,php,zend-framework,amazon-s3,gd,Php,Zend Framework,Amazon S3,Gd,我目前正在构建一个Zend Framework PHP web服务,它可以从Android手机上传一张图像,调整其大小,然后将其放入Amazon web Services S3中 这是我的密码: $img = $_FILES['image']; if(!$img) { return null; } if((($img['type'] == 'image/gif') || ($img['type'] == 'image/j

我目前正在构建一个Zend Framework PHP web服务,它可以从Android手机上传一张图像,调整其大小,然后将其放入Amazon web Services S3中

这是我的密码:

$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.");
    }
$img=$\u文件['image'];
如果(!$img)
{
返回null;
}
如果(($img['type']=='image/gif')||
($img['type']=='image/jpeg')||
($img['type']=='image/png'))&&
($img['size']<1048576))
{
如果($img['error']>0)
{
抛出新异常(“图像包含错误”);
}
$size24=24;
//获取身份验证设置
$bootstrap=$this->getInvokeArg('bootstrap');
$awsConfigs=$bootstrap->getOption('aws');
$s3=新的Zend_服务\u Amazon_s3($awsConfigs['appkey',$awsConfigs['secretkey');
$bucketName='item';
$folderName='image';
$perms=数组(
Zend_服务_亚马逊_S3::S3_ACL_头=>
zend_service_amazon_s3::s3_ACL_PUBLIC_READ
);
$name=$bucketName.'/'.$folderName.'/'.uniqid().''.Zend_Date::now()->toString('yyyyMMdd');
$smallPath=$name.\u 32.png';
//调整大小并上载24x24图像
$srcImg=imagecreatefrompng($img['tmp_name']);
$tmp=imagecreatetruecolor($size24,$size24);
列表($oriWidth,$oriHeight)=getimagesize($img['tmp_name']);
imagecopyresampled($tmp、$srcImg、0、0、0、$size24、$size24、$oriWidth、$oriHeight);
//不起作用
imagepng($tmp,“tmp_32.png”)
$smallret=$s3->putFile(“tmp_32.png”,$smallPath,$perms);
图像处理(tmp);
图像销毁($srcImg);
}
其他的
{
抛出新异常(“图像大小/格式不合格”);
}
我正在考虑一种将图像资源转换为流的方法,因此我可以使用$s3->putFileStream或putObject方法,但我找不到有效的方法


有什么想法吗?

下面是如何将图像写入变量而不写入文件:

ob_start();
imagepng($image);
$image_data = ob_get_contents();
ob_end_clean();
如果变量中包含文件内容,则可以使用putObject。下面是我们使用file\u get\u内容的示例。注意,我们从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));
    }
$image\u data=file\u get\u contents();
$aws_accesskey=Zend_Registry::get('config')->amazon->accesskey;
$aws_secret=Zend_Registry::get('config')->amazon->secret;
$s3=新的Zend_服务\u亚马逊\u s3($aws_accesskey,$aws_secret);
$image\u path=Zend\u Registry::get('config')->amazon->s3->assetsbucket。“/images/$filename”;
$s3->putObject($image\u path,$image\u data,array(Zend\u Service\u Amazon\u s3::s3\u ACL\u HEADER=>Zend\u Service\u Amazon\u s3::s3\u ACL\u PUBLIC\u READ));
}