Laravel - 更改请求对象上文件的 MIME 类型

Laravel - change mime-type of a file on the request object

我正在上传一个扩展名为 dwf 的文件。

但是 $request->file('dwf_file')->extension() 给我 bin 而不是 dwf 并且文件上的 mime 类型被错误地设置为 application/octet-stream 可能是它的原因猜测是二进制文件

现在,我正在尝试在验证开始之前即时更改 MIME 类型:

$file = $request->file('dwf_file');

$request->merge([
    'dwf_file' =>
      new \Illuminate\Http\UploadedFile(
         $file->getPath(),
         $file->getClientOriginalName(),
         'model/vnd.dwf' // correct mime-type
     )
]);

$request->validate(...); // fails because uploaded file's extension is not dwf

它不起作用,我认为主要是因为合并只处理输入源而不处理文件。

那么,如何将 dwf_file 更改为 UploadedFile 的新实例?或者我可以更改现有 UploadedFile 实例的 mime 类型吗?我在 class.

上找不到任何 setMimeType 方法

我有哪些选择?

谢谢。

您可以使用 getClientOriginalExtension。它将 return dwf extension .

$request->file('dwf_file')->getClientOriginalExtension()

并且 $request->file('dwf_file')->extension() 将 return bin

您可以使用

获取mimeType
$request->file('dwf_file')->getMimeType() or getClientMimeType()

这将 return "application/octet-stream"

形式

<form method="POST" enctype="multipart/form-data">

作为旁注

getClientOriginalExtension()

Returns 原始文件 extension.It 是从 uploaded.Then 的原始文件名中提取的,不应将其视为安全值。

已更新

我认为 dwf 扩展不能正常用于 mimes validation.Because dwf 文件上传 return bin 因为 mimes.So 最好创建自定义验证

  'dwf_file' => ['file','mimeTypes:application/octet-stream', function ($attribute, $value, $fail) {

            if ($value->getClientOriginalExtension() != 'dwf') {
                    $fail('The '.$attribute.' is invalid.');
                }
            }],