ユーザーがスプレッドシートをアップロードできるツールがあり、スプレッドシートを Laravel-Excel で解析します。私の問題は、ファイルを解析する前に、ファイルが有効な Excel ファイルであることを確認するにはどうすればよいですか?
PHPOffice/Laravel-Excel ドキュメントを調べたところ、ファイルを検証する方法が見つかりませんでした。したがって、私の次の推測では、無効なファイルを Load() しようとすると、爆発して警告またはエラーが発生するということでした。ただし、それを行うのではなく、ファイルを解析して、何らかの方法でスプレッドシートに変換しようとします。たとえば、私はそれに pdf を与え、pdf ファイルで見つけた非バイナリ ジャンクを含むコレクションを生成しました。これは望ましくありません。
現在、ファイルを検証するために MIME タイプのチェックを行っています。
//valid mime types
$mimeTypes = [
'application/csv', 'application/excel',
'application/vnd.ms-excel', 'application/vnd.msexcel',
'text/csv', 'text/anytext', 'text/plain', 'text/x-c',
'text/comma-separated-values',
'inode/x-empty',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
];
$file = request()->hasFile('file');
if ($file) {
if (in_array(request()->file('file')->getClientMimeType(), $mimeTypes)) {
//then parse the file
Config::set('excel.import.heading', 'original');
$data = Excel::load(request()->file('file')->path(), function ($reader) {
})->get();
//do some stuff with data...
} else {
//invalid file
}
} else {
//no file uploaded
}
これは理想的ではありません。考えられる MIME タイプにはエキゾチックな種類があるように思われるため、リストを積極的に維持する必要があり、特定の csv ファイルにはプレーンテキストの MIME タイプがあるため、非 csv プレーンテキスト ファイルはここでマスターを通過します。 . ファイルを検証するために、Laravel、Laravel-Excel、または PHPOffice のいずれかによって提供される標準的な方法はありますか?