2017-12-20 11 views
1

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かどうかを安全に知る方法はありますか?

ありがとうございます!

+0

テストケースでは、csvファイルのファイル名は何ですか? –

+0

ファイルをアップロードするフォームを追加してください。 'ファイル' => 'true'を含める必要があります – ochhii

+0

ファイル名にスペースが含まれていると、検証に失敗します –

答えて

0

必須のmimes:csv、txtを検証csvファイルに使用できます。

関連する問題