LoginSignup
2
5

More than 5 years have passed since last update.

Laravel5.2 DBに登録済みのバイナリデータをダウンロードさせる

Last updated at Posted at 2016-07-14

やりたいこと

Laravel5でDBに登録済のバイナリデータをダウンロードさせる。
Laravel5 publicディレクトリからファイルダウンロードする記事は出てくるが、DBに登録済のバイナリデータをダウンロードする方法についてはあまり記述がなかった。

環境

・Laravel 5.2
・Laravel/homestead v0.5.0
  ・Ubuntu 16.04
  ・PHP7
  ・Nginx
  ・MySQL等
参照URL:Vagrant box laravel/homesteadLaravel ドキュメント

前提条件

DBにバイナリデータが既に格納済。
Hogeテーブルに主キーとなるid、ファイルタイトルを格納するfile_title、バイナリデータを格納するfile_dataが存在する。

手順

1.DBからバイナリデータを取得する。
2.取得したバイナリデータをfile_put_contentsの第2引数に指定でファイルに書き込む。
第1引数はデータを書き込むファイルへのパスだが、存在しないファイルを指定しても新規作成されるので問題ない。
3.ヘッダーに拡張子を指定する。オリジナルの拡張子も使える。
4.レスポンスに返却する。

HogeController.php

    /**
     * Hogeファイルダウンロード実行Action
     * download/{id}のURLのidから、Hogeテーブルの指定したidをキーとするファイルをDLする
     */
    public function downloadHoge($id) {
        $hoge = Hoge::where('id', '=', $id)->first();

        // タイトル取得
        $title = $hoge->file_title;
        // バイナリデータ取得
        $fileData = $hoge->file_data;

        // 取得したバイナリデータをファイルに書き込んでレスポンスに返却
        $writingHogeData = '.hoge';
        file_put_contents($writingHogeData , $fileData);

        // 拡張子はhoge
        $headers = array(
            'Content-Type: application/hoge',
        );

        return response()->download($writingHogeData, $title, $headers);
    }

参考

PHPマニュアル:file_put_contents
stackoverflow:Download files in laravel using Response::download

2
5
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
2
5