質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

0回答

1737閲覧

Laravelでの大容量ファイルのアップロード高速化方法について

m6388544291

総合スコア2

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2020/06/30 07:25

前提・実現したいこと

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に返却

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問