2013-10-07 268 views
0

1)我有上傳表格S3 Bucket亞馬遜問題

2)它將文件上傳到我的本地存儲move_uploaded_file。

3)它使用zend putObject函數將文件移動到s3對象。

一切正常,直到我有大約30Mb到40 Mb的文件大小。問題是,當我嘗試上傳80 Mb,100 Mb左右的大文件時,移動到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

什麼問題?大文件總是需要更長的時間才能上傳,而不是更小的文件。這個網絡並不神奇,並且不能僅僅因爲它們更大就適用於大文件。 –

回答

1

答案是一個工作進程。您可以在服務器啓動時通過PHP CLI啓動一個PHP工作者腳本,也許在您的盒子上運行一個GearmanClient php擴展和gearman服務器。然後,您排隊後臺作業,將文件上傳到S3,而您的主站點PHP代碼在發佈作業後返回成功,並且文件在後臺快樂地在後臺上傳,而前臺網站繼續以快樂的方式繼續。這樣做的另一種方式是讓另一臺服務器完成所有這些任務,而您的主站點仍然沒有使用這個過程。我現在正在這樣做。它運作良好。