1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CSVダウンロード(サーバからクライアント側へ)

Last updated at Posted at 2024-03-20
  1. エラーチェック:

    • 最初に、選択されたセンサーが存在しないかどうかを確認します。**selectedSensors**という配列が空であれば、選択されたセンサーがないということです。その場合、エラーメッセージが表示され、関数はそこで終了します。
  2. リクエストの準備:

    • 選択されたセンサーが存在する場合は、リクエストのパラメータを準備します。これは、選択されたセンサーの情報を含むオブジェクトです。
  3. ダウンロードリクエストの送信:

    • ダウンロードを実行するために、HTTP POSTリクエストが行われます。リクエストのURLは**/admin/sensor/download**です。
    • レスポンスの形式はBlob形式で、これはファイルデータをバイナリ形式で表します。
  4. リクエストの成功とファイルのダウンロード:

    • リクエストが成功すると、サーバーからの応答データがBlobとして返されます。
    • このBlobデータから、ダウンロードするファイルの種類(MIMEタイプ)とファイル名を取得します。
    • 最後に、ブラウザがBlobデータをファイルとしてダウンロードします。
  5. エラーハンドリング:

    • もしリクエストがエラーを返した場合、**catch**ブロックが実行されます。この場合、エラーメッセージが表示されます。
  6. 最後の処理:

    • ダウンロード処理の成否にかかわらず、最後にローディング状態を解除します。
    public function download(Request $request)
        {
            // 選択中のセンサー情報のSIDをリクエストから取得
            $selectedSensorSids = $request->input('sid');
    
            // 選択中のセンサー情報をデータベースから取得
            $selectedSensors = MtSensor::whereIn('sid', $selectedSensorSids)->get();
    
            // CSVデータを生成
            $csvData = $this->createCsvData($selectedSensors);
    
            // CSVデータをレスポンスとして返す
            return Response::make($csvData, 200, [
                'Content-Type' => 'text/csv',
                'Content-Disposition' => 'attachment; filename="selected_sensors.csv"',
            ]);
        }
    
        /**
         * 選択されたセンサー情報からCSVデータを生成するメソッド
         *
         * @param  \Illuminate\Database\Eloquent\Collection  $selectedSensors
         * @return string
         */
        private function createCsvData($selectedSensors)
        {
            // CSVのヘッダー行を作成
            $csvData = "Sensor ID, ID, Temperature Lower, Temperature Upper, Humidity Lower, Humidity Upper, Battery Level, No Signal Time, Group SID, Remarks, Receive Interval, Is Enabled\n";
    
            // 選択されたセンサー情報をループしてCSVデータを追加
            foreach ($selectedSensors as $sensor) {
                // 各センサーの情報をCSV行に追加
                $csvData .= "{$sensor->sensor_id}, {$sensor->id}, {$sensor->temperature_lower}, {$sensor->temperature_upper}, {$sensor->humidity_lower}, {$sensor->humidity_upper}, {$sensor->battery_level}, {$sensor->no_signal_time}, {$sensor->group_sid}, {$sensor->remarks}, {$sensor->receive_interval}, {$sensor->is_enabled}\n";
            }
    
            return $csvData;
        }
    }
    

    download メソッドの解説:

    1. リクエストの処理: 選択中のセンサー情報のSIDをリクエストから取得します。
    2. データベースからの取得: 取得したSIDを使って、選択中のセンサー情報をデータベースから取得します。
    3. CSVデータの生成: 取得したセンサー情報からCSVデータを生成する createCsvData メソッドを呼び出します。
    4. レスポンスの作成: 生成したCSVデータをレスポンスとして返し、ダウンロードさせます。
      createCsvData メソッドの解説:
    5. CSVヘッダーの作成: CSVファイルの最初の行に、各列のヘッダー情報を追加します。
    6. センサー情報の追加: データベースから取得した各センサーの情報をループして、CSVデータに追加します。
1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?