環境
Laravel 5.1
"maatwebsite/excel": "~2.1.0"
PHP7.0
maatwebsiteのエクセルライブラリを使ってエクセルを作成してstringに変換してputする
ファイルのオブジェクトそのままは渡せないので注意
createExcelAndSendS3.php
$fileName = $date . '.xls';
$fileContent = Excel::create($fileName , function($excel) use ($licencies) {
$excel->sheet('Excel', function($sheet) use ($licencies) {
$sheet->fromArray($licencies);
});
})->string('xls');
Storage::disk('s3')->put($fileName, $fileContent);
ちなみにmaatwebsite/excelのバージョンが3.0以上ならこういう書き方ができる(3.1ならオプションを色々使える)
storeExcelToS3.php
public function storeExcel()
{
// Store on a different disk (e.g. s3)
Excel::store(new InvoicesExport(2018), 'invoices.xlsx', 's3');
// Store on a different disk with a defined writer type.
Excel::store(new InvoicesExport(2018), 'invoices.xlsx', 's3', Excel::XLSX);
}
外部とのアクセスはFWの中まで読まないと仕様がわからない時があるなぁ
そもそもExcelのライブラリのバージョンあげられればワンライナーで書けたんだけど・・・