LoginSignup
5
6

More than 3 years have passed since last update.

Laravelでファイルアップロード機能を実装する

Last updated at Posted at 2020-05-05

目次

Laravelの記事一覧は下記
PHPフレームワークLaravelの使い方

Laravelバージョン

動作確認はLaravel Framework 7.19.1で行っています

前提条件

eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

Controllerにメソッド追加

(1) /sample/app/Http/Controllers/SampleController.phpにuploadメソッドを追記

    public function upload(Request $request)
    {
        $file = $request->file('a');

        if (!is_null($file)) {

            date_default_timezone_set('Asia/Tokyo');

            $originalName = $file->getClientOriginalName();
            $micro = explode(" ", microtime());
            $fileTail = date("Ymd_His", $micro[1]) . '_' . (explode('.', $micro[0])[1]);

            $dir = 'upFiles';
            $fileName = $originalName . '.' . $fileTail;
            $file->storeAs($dir, $fileName, ['disk' => 'local']);

        }

        return view('sample.upload');
    }

Request#fileメソッドでアップロードされたファイルを取得できます
storeAsメソッドでstorage/app配下にファイルを保存できます
storeAsメソッドの第一引数はstorage/app配下の保存先ディレクトリを指定します
storeAsメソッドの第二引数は保存後のファイル名を指定します
storeAsメソッドの第三引数はconfig/filesystems.php内のdisks配列のkeyをdisk要素で指定します
config/filesystems.php内のdisks配列を見るとわかりますが、そこでファイルの保存先のrootをstorage/app配下に指定しています

(2) /sample/routes/web.phpに下記を追記
Route::post('sample/upload', 'SampleController@upload');

viewの作成

/sample/resources/views/sample/upload.blade.phpファイル作成

upload.blade.php
<html>
    <head>
        <title>sample</title>
    </head>
    <body>

        <form action="{{ url('sample/upload') }}" method="post"  enctype="multipart/form-data">
            @csrf
            <input type="file" name="a" >
            <input type="submit" >
        </form>

    </body>
</html>

動作確認

http://localhost/laravelSample/sample/upload

ファイルを選択して
送信ボタンクリック

storage/app配下にupFilesフォルダができて、その中にアップロードしたファイルが格納されました

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6