Когда вы «захватите изображение», вам придется как минимум записать его во временный файл локально.Это потому, что независимо от того, используете ли вы fopen () или curl для доступа к файлу, вам понадобится какой-то способ записать поток в Amazon.Я не уверен в способе программирования потока, который по существу соединяет удаленный файл напрямую с S3.Фактически, это теоретически невозможно, поскольку S3 не может выполнять сценарии, а изображение не может запускать сценарии.
Вы можете загрузить изображение через потоковый буфер в той или иной форме, если вы хотите минимизировать объем информации, хранящейся в памяти, но записать ее во временный файл должно быть проще всего.Если вам не хватает места из-за того, что у вас в системе так много пользователей, вы либо обновляете сервер до большого, либо добавляете другой сервер под балансировщиком нагрузки.Лично я использую PHP-класс Amazon S3 в своей системе и перемещаю его из временного файла локально напрямую в 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 позволяет отправлять jpeg непосредственно в ответ HTTP".