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


How do you upload an image to Amazon S3 using wideimage

我正在使用适用于PHP和wideimage的Amazon SDK。 我正在使用宽图像调整图像大小,然后尝试将该调整大小的图像上传到 Amazon S3。

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

上传

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

有谁知道正确的方法吗?

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

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

调整图像大小时,必须转换为字符串。你可以用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,    

));

我希望这有所帮助。

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

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

其次,如果您使用的是CDN(内容交付网络),那么CDN使用拉动服务器技术意味着我们不会将静态内容推送到CDN服务器,但是当用户/客户端要求静态内容时,CDN首先检查其整个服务器,如果未找到,则要求我们的主服务器这样做。

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

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

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