php - 如何将 PHP 图片资源放入 Amazon Web Services?

标签 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/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 方法,但我找不到有效的方法。

有什么想法吗??

最佳答案

下面是如何在不写入文件的情况下将图像放入变量:

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));
    }

关于php - 如何将 PHP 图片资源放入 Amazon Web Services?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9893060/

相关文章:

Youtube URL 的 PHP 正则表达式否定

mysql - Mysql 上的 Zend 框架查询

php - 获取 ./doctrine orm :run-dql to work with the sandbox

amazon-web-services - 如何修复 S3 存储桶和 SQS 之间的循环依赖关系?

html - 使用 Plupload HTML5 运行时直接上传到 Amazon S3

php - Aws PHP Sdk 3:S3::putObject():AWS HTTP 错误:cURL 错误 6:无法解析主机 's3.Ireland.amazonaws.com'

php - 有什么方法可以在 phpunit 测试之间保留实例变量?

php - localhost http 500 内部服务器错误

php - 在多个服务器上扩展 cronjobs

php - 如何让 Symfony 呈现实体中可为空字段的复选框?