我正在上传一个扩展名为dwf
的文件。
然而,执行$request->file('dwf_file')->extension()
时,给我bin
而不是dwf
,并且文件上的mime类型被错误地设置为application/octet-stream
,这可能是它猜测它是二进制文件的原因。
现在,在验证开始之前,我正在尝试动态更改mime类型:
$file = $request->file('dwf_file');
$request->merge([
'dwf_file' =>
new IlluminateHttpUploadedFile(
$file->getPath(),
$file->getClientOriginalName(),
'model/vnd.dwf' // correct mime-type
)
]);
$request->validate(...); // fails because uploaded file's extension is not dwf
它不起作用,我认为主要是因为merge只处理输入源,而不处理文件。
那么,如何将dwf_file
更改为UploadedFile
的新实例?或者我可以更改现有UploadedFile
实例上的mime类型吗?我在这个类上找不到任何setMimeType
方法。
我有什么选择?
谢谢。
您可以使用getClientOriginalExtension
。它将返回dwf extension
。
$request->file('dwf_file')->getClientOriginalExtension()
并且$request->file('dwf_file')->extension()
将返回bin
。
您可以使用获得mimeType
$request->file('dwf_file')->getMimeType() or getClientMimeType()
这将返回"application/octet-stream"
形式
<form method="POST" enctype="multipart/form-data">
作为旁注
getClientOriginalExtension((
返回原始文件扩展名。它是从上传的原始文件名中提取的。那么它就不应该被认为是一个安全值。
更新
我认为dwf
扩展无法正常用于mimes验证。因为上传的dwf文件以mimes的形式返回bin
。因此,更好地创建自定义验证
'dwf_file' => ['file','mimeTypes:application/octet-stream', function ($attribute, $value, $fail) {
if ($value->getClientOriginalExtension() != 'dwf') {
$fail('The '.$attribute.' is invalid.');
}
}],