有没有办法使用URL抓取图像并将其直接保存到亚马逊?
用PHP?
我的另一个选择是在本地保存文件并使用S3 PHP类发送它.
当您"抓取图像"时,您将至少必须在本地将其写入临时文件.这是因为无论您使用fopen()还是curl来访问该文件,您都需要一些方法将流写入Amazon.我不确定如何编写基本上将远程文件直接连接到S3的流.事实上,理论上不可能,因为S3无法执行脚本,图像无法运行脚本.
如果您希望最小化存储在内存中的信息量,您可以通过某种形式的流缓冲区加载图像,但将其写入临时文件应该是最简单的事情.如果由于系统中有这么多用户而导致空间不足,则可以升级到大型服务器或在负载均衡器下添加其他服务器.就个人而言,我在我的系统上使用亚马逊的S3 PHP类,并使用类似这样的脚本将其从本地临时文件直接移动到S3:
function upload_image( $image_data ) { // // Write the image to S3 // $s3 = new AmazonS3(); $bucket = ACTIVITY_S3_BUCKET; $image_id = uniqid('myscript'); $path = ACTIVITY_S3_FOLDER.'/'.$image_id; $response = $s3->create_object($bucket, $path, array( 'body' => $image_data, 'acl' => AmazonS3::ACL_PUBLIC )); $image_url = 'https://s3.amazonaws.com/'.ACTIVITY_S3_BUCKET.'/'.$path; return $image_id; }
很显然,这不是一个强大的脚本,但我想我只是分享了自己走下去的道路.我应该补充一点,因为在这种情况下你的主要关注点似乎是处理能力,请查看这篇关于调整云中数十亿图像大小的有趣帖子. http://www.nslms.com/2010/11/01/how-to-resize-billions-of-images-in-the-cloud/
更新 根据此答案如何最好地调整服务器外的图像 "PHP/GD允许您直接在http响应中发送jpeg."