1

我正在使用Amazon SDK for PHPwideimage。我正在使用宽幅图像调整图像大小,然后尝试将该调整大小的图像上传到 Amazon S3。

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

上传

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

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

4

4 回答 4

1

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

于 2012-10-02T21:21:22.860 回答
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,    

));

我希望这会有所帮助。

于 2013-04-16T02:48:28.767 回答
1

我想指出一些事情可能会帮助某人做出选择。

首先,我认为您最好先尝试在服务器上调整图像大小,然后将其移动到亚马逊,因为假设如果有某种方法可以同时调整大小和上传图像,那么您的脚本将执行缓慢,因为脚本必须调整大小并将其保存到目的地很远的服务器。如果图像很少,这将是次要的,但是当它即使在高速带宽上进行巨大的调整大小时也可能是一个问题,因为 PHP 将无法释放其用于调整图像大小的资源,直到它没有完全保存目标图像。

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

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

可以在http://www.binarymoon.co.uk/2010/11/timthumb-cdn-amazon-s3-good/上阅读详尽的文章。这实际上是关于 TimThumb 但值得深入了解。

于 2014-01-31T20:13:16.167 回答
0

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

于 2012-04-16T22:45:05.213 回答