如何使用wideimage将图像上传到Amazon S3

时间:2012-04-11 16:58:31

标签: php amazon-s3

我正在使用Amazon SDK for PHPwideimage。我正在使用wideimage调整图像大小并尝试将调整后的图像上传到Amazon S3。

$resized = $image->resize($width,$height);

上传

$response = $s3->create_object($myBucket, $newFilename, array(
    'fileUpload' => $resized, //this does not work          
));

有谁知道这样做的正确方法?

4 个答案:

答案 0 :(得分:1)

您可以使用流包装器并使用WideImage的saveToFile方法。 S3有许多流包装器,这是一个例子:https://github.com/jakajancar/S3StreamWrapper

答案 1 :(得分:1)

您无需保存图像,然后从那里上传。

调整图像大小时,必须转换为字符串。你可以用WideImage类做​​到这一点。

示例:

$image = WideImage::load($_FILES["file"]['tmp_name']);
$resized = $image->resize(1024);
$data = $resized->asString('jpg');

然后当您在亚马逊上传时,您必须使用参数'body'而不是'fileUpload'。

示例:

$response = $s3->create_object($myBucket, $newFilename, array(
'body' => $data,    

));

我希望有所帮助。

答案 2 :(得分:1)

我想指出一些可能有助于某人做出选择的事情。

首先,我认为你最好选择你要做的事情,首先在你的服务器上调整图像大小,然后将其移动到亚马逊,因为假设有某种方法可以同时调整大小和上传图像然后你的脚本将执行缓慢,因为脚本将不得不调整大小并将其保存到远离目标的服务器。如果图像很少,但即使在高速带宽上进行大规模调整也会出现问题,并且由于PHP无法释放其用于图像大小调整的资源,直到它还没有完全保存目标图像。

其次,如果您使用的是CDN(内容分发网络),那么CDN使用 PULL SERVER 技术意味着我们不会将静态内容推送到CDN服务器,但是当用户/客户端要求静态内容时然后CDN首先检查其整个服务器,如果没有找到,那么它会询问我们的主服务器。

Amazon S3 不是真正的CDN 。 S3专为内容存储而设计。用于内容交付的正确亚马逊服务是Amazon CloudFront。如果我们将文件保存到任何文件到任何存储服务器或CDN,则称为 PUSH SERVER

可以在http://www.binarymoon.co.uk/2010/11/timthumb-cdn-amazon-s3-good/上阅读详尽的文章。这实际上是关于TimThumb但值得一个很好的知识。

答案 3 :(得分:0)

我最终将文件保存到服务器,然后从那里上传文件。如果有更好的方法请告诉我。