2013-10-07 4 views
0

1) Я загрузил формуS3 Bucket Amazon issue

2) Он загружает файл в локальное хранилище move_uploaded_file.

3) Он использует функцию zend putObject для перемещения файла на объект s3.

Все работает нормально, пока размер файла не составляет от 30 МБ до 40 МБ. Проблема в том, что когда я пытаюсь загрузить более крупные файлы, например, 80 МБ, 100 МБ или около того, файл, перемещающийся на s3, занимает много времени, чтобы завершить загрузку. Мой код-то вроде этого:

$orginalPath = APPLICATION_PATH."/../storage/".$fileName; 
move_uploaded_file($data['files']['tmp_name'], "$orginalPath"); 

$s3 = new Zend_Service_Amazon_S3($accessKey, $secretKey); 

$s3->putObject($path, file_get_contents($orginalPath), 
    array(Zend_Service_Amazon_S3::S3_ACL_HEADER =>Zend_Service_Amazon_S3::S3_ACL_PUBLIC_READ)); 

Можете ли вы помочь, как обрабатывать большие файлы быстро двигаться, я попытался с помощью streamWrapper как этот

$s3->registerStreamWrapper("s3"); 


file_put_contents("s3://my-bucket-name/orginal/$fileName", file_get_contents($orginalPath)); 

Но не повезло, это займет же много времени, чтобы переместить файл.

Следовательно, существует эффективный способ быстрого перемещения файла в ведро s3?

+1

В чем проблема? Большие файлы будут ВСЕГДА занимать больше времени, чем файлы меньшего размера. Сеть не волшебна и не может применять turbo boost для больших файлов только потому, что они больше. –

ответ

1

Ответ - рабочий процесс. Вы можете запустить скрипт PHP-скрипта через PHP CLI при загрузке сервера, возможно, с расширением php расширения GearmanClient и сервером передач, работающим на вашем ящике. Затем вы заказываете фоновое задание, чтобы загрузить файл на S3, в то время как ваш PHP-код вашего сайта возвращает успех после выдачи задания, и файл успешно загружается в фоновом режиме, в то время как ваш сайт переднего плана продолжает оставаться веселым. Другой способ сделать это - сделать другой сервер выполнять всю эту задачу, в то время как ваш основной сайт остается без использования этого процесса. Я делаю это сейчас. Это работает хорошо.