前提・実現したいこと
Laravelでの1GBのファイルをアップロードする際にドキュメントでは下記の項とが記述されているためドキュメントに沿ってソースを作成しました。
AWS SDK for PHP には、 5 GB までのファイルをアップロードできる PutObject と、 大容量ファイルをアップロードするための MultipartUploader メソッドが用意されている。
MultipartUploader
マルチパートアップロードは、大容量オブジェクトのアップロードを効率よく行えるように設計されています。マルチパートアップロードでは、オブジェクトを分割して、別々に任意の順序で並行してアップロードできます。
発生している問題・エラーメッセージ
ファイルにかかるアップロード時間 70MB => 30秒 250MB => 1分30秒 500MB => 2分40秒 1GB => 6分40秒
該当のソースコード
php
1 2function store(Request $request) 3 { 4 ini_set('max_execution_time', 600); 5 ini_set('memory_limit', -1); 6 $s3Client = new S3Client([ 7 'credentials' => array( 8 'key' => Env('AWS_ACCESS_KEY_ID'), //アクセスキー 9 'secret' => Env('AWS_SECRET_ACCESS_KEY') //シークレットキー 10 ), 11 'version' => '2006-03-01', 12 'region' => 'ap-northeast-1', 13 ]); 14 $bucket = Env('AWS_BUCKET'); 15 16 $filename = 'sample.mp4'; 17 $url='test/movie' 18 19 // Using stream instead of file path 20 $source = fopen($request->movie_file, 'rb'); 21 $s3fullFullFilePath = $url . '/' . $filename; 22 23 $uploader = new MultipartUploader($s3Client, $source, [ 24 'bucket' => $bucket, 25 'key' => $s3fullFullFilePath, 26 ]); 27 28 29 do { 30 try { 31 $result = $uploader->upload(); 32 } catch (MultipartUploadException $e) { 33 sleep(5); 34 $uploader = new MultipartUploader($s3Client, $source, [ 35 'bucket' => $bucket, 36 'key' => $s3fullFullFilePath, 37 'state' => $e->getState(), 38 ]); 39 } 40 } while (!isset($result)); 41 fclose($source); 42 return true; 43
その他
この方法では画面で1GBのファイルをアップロード時に画面がずっとwaitting状態になってしまいます。
どのようにしたら改善できるのか教えていただいきたいです。
備考
APIとAPPの構成になっております。
1、APPからファイルアップロード 2、APIでS3にファイルをアップロード 3、APIからステータスをAPPに返却
あなたの回答
tips
プレビュー