CSVファイルをアップロードしようとしていますが、何か他の処理を行う前に検証したいと思います。だから、私はFormRequestに次のコードを使用します。私は、ファイルをアップロードするために使用LaravelでCSVファイルを検証する
public function rules()
{
return [
'csvFile' => 'required|file|mimes:csv'
];
}
形式は次のとおりです。
<form action="{{ route('uploadFile') }}" method="post" enctype="multipart/form-data">
{{ csrf_field() }}
<div class="form-group">
<label for="fileToUpload">CSV File to upload</label>
<input name="csvFile" type="file" class="form-control" id="fileToUpload" placeholder="Select file">
</div>
<button type="submit" class="btn btn-primary">Upload</button>
</form>
問題は、それが動作しないということです。 getMimeTypeを(使用して私のtest.CSVファイルのMIMEタイプをチェックしようとしている)私が手:
"text/plain"
が、私はgetClientMimeType()を使用している場合、私は得る:私が読んだものから
"text/csv"
すると、その次のとおりです。
クライアントのMIMEタイプ(getClientMimeType())は、ファイルがアップロードされた要求から抽出 のでそれでありますは安全な値とみなされません。 信頼MIMEタイプについて
、のgetMimeType(ファイルの内容に基づいて MIMEタイプを推測)の代わりに()を使用します。
明らかに、私はgetMimeType()を使用する必要がありますが、少なくとも(ほとんどの場合は)機能しません。
end(explode('.', $file->getClientOriginalName()));
これは、結果として「CSV」を返しますが、それはハックのように感じている:
は私が行うことで、これを真似してみました!また、簡単にだますことができます。
ファイルの種類が.csvかどうかを安全に知る方法はありますか?
ありがとうございます!
テストケースでは、csvファイルのファイル名は何ですか? –
ファイルをアップロードするフォームを追加してください。 'ファイル' => 'true'を含める必要があります – ochhii
ファイル名にスペースが含まれていると、検証に失敗します –