chr*_*ang 5 php csv request laravel
我正在尝试上传一个 CSV 文件,我想在执行其他任何操作之前对其进行验证。所以我在 FormRequest 中使用以下代码:
public function rules()
{
return [
'csvFile' => 'required|file|mimes:csv'
];
}
Run Code Online (Sandbox Code Playgroud)
我用于上传文件的表格是:
<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>
Run Code Online (Sandbox Code Playgroud)
问题是它不起作用。尝试使用 getMimeType() 检查我的 test.csv 文件的 MIME 类型,我得到:
"text/plain"
Run Code Online (Sandbox Code Playgroud)
但是如果我使用 getClientMimeType() 我得到:
"text/csv"
Run Code Online (Sandbox Code Playgroud)
从我读到的是:
客户端 MIME 类型 ( getClientMimeType() ) 是从上传文件的请求中提取的,因此不应将其视为安全值。
对于受信任的 MIME 类型,请改用getMimeType()(根据文件内容猜测 MIME 类型)。
显然,我应该使用 getMimeType(),但它不起作用(至少在大多数情况下)。
我试图通过这样做来模仿这一点:
end(explode('.', $file->getClientOriginalName()));
Run Code Online (Sandbox Code Playgroud)
这将返回 'csv' 结果,但感觉就像一个黑客!此外,它很容易被愚弄。
有没有办法安全地知道文件是否为 .csv 类型?
谢谢!