3

我有一个简单的控制器来处理图像上传。在将图像/文件保存到最终目的地之前,我想验证该文件的 mimeType。

我的控制器使用Psr\Http\Message\ServerRequestInterface并调用getUploadedFiles()将上传的文件作为Psr\Http\Message\UploadedFileInterface.

在该接口的一个实例上,我现在可以调用getClientMediaType()以获取 mime 类型。

我的问题是文档明确声明不信任该值!因此,我想检测 mimeTypemime_content_type()但我无法从该界面获取实际文件名。

我看到两个选项:

  • 我可以只使用 $_FILES 并调用 mime_content_type($_FILES['files']['tmp_name'])
  • 我可以将文件移动到我知道的地方,然后调用 mime_content_type() 但这会破坏在验证之前不移动文件的目的

这是我的控制器的缩写版本:

    public function handleUpload(ServerRequestInterface $request, ResponseInterface $response) {
        $files = $request->getUploadedFiles();
        /** @var UploadedFile $uploadedFile */
        $uploadedFile = $files[0];

        $fileType = $uploadedFile->getClientMediaType(); // This need to be replaced !
        if (!in_array($fileType, self::VALID_IMAGE_MIME_TYPE)) {
            // return error
        }

        // do stuff
    }

关于如何从 UploadedFileInterface 获取 tmp_name 有没有我没有看到的方法?是否有另一种最佳实践来进行这种验证?这似乎是一个非常明显的问题,所以我想我缺少一些基本的东西。

4

0 回答 0