Laravel7でCSV読み込みとPDF送信

コンポーネントはこちら

// dompdf
composer require barryvdh/laravel-dompdf
// phpspreadsheetを使うにはzipが必要
sudo yum install --enablerepo=remi,remi-php73 php-pecl-zip
// spreadsheet
composer require phpoffice/phpspreadsheet

CSV読み込み

// upload処理
$request->validate([
     'file' => 'required|mimes:csv,txt|max:2048', // csvとtxt以外は拒否
]);
$fileName = time().'.'.$request->file->extension(); // ファイル名生成
$request->file->move(storage_path('tmp'), $fileName); // storage/tmpフォルダに移動
self::insertCsv(storage_path('tmp') . '/' . $fileName);

// 保存したファイルをCSVでゴニョゴニョ

private static function insertCsv($path = null) {

    // CSV取得
    $file = new SplFileObject($path);
    $file->setFlags(
        SplFileObject::READ_CSV |
        SplFileObject::READ_AHEAD |
        SplFileObject::SKIP_EMPTY |
        SplFileObject::DROP_NEW_LINE
    );
    $array = array();
    // 一行ずつ処理
    foreach($file as $key => $line)
    {
        $array['hoge'] = $line['hogehoge'];
    }
}

フロント側はajaxでUPLOAD

jQuery(document).ready(function($) {
var uploadFile = function(file) {
    formData = new FormData();
    formData.append('file', file);
    formData.append('_token', $('input[name="_token"]').val());
    $.ajax({
        url: "/hoge/upload", // 通信先のURL
        type: "POST", // 使用するHTTPメソッド
        data: formData,
        enctype: 'multipart/form-data',
        processData: false,
        contentType: false,
        cache: false,
        dataType: "csv",
        timespan: 1000 		// 通信のタイムアウトの設定(ミリ秒)
    }).done(function (item, textStatus, jqXHR) {
        alert('CSVの登録が完了しました。');
    }).fail(function (jqXHR, textStatus, errorThrown) {
        // 7. alwaysは、成功/失敗に関わらず実行される
    }).always(function () {
    });
};

これでajaxにてCSVファイルをUPして保存できました。

コメント

タイトルとURLをコピーしました