首页 > 解决方案 > 上传文件时 Laravel 6.0 出现“SplFileInfo::getSize(): stat failed”异常

问题描述

我正在使用 Laravel 6.0 构建一个简单的图像上传系统。

但是由于某些奇怪的原因,即使图像已成功上传到正确的文件夹,我仍然遇到“SplFileInfo::getSize(): stat failed”异常......我可以做些什么 1)跳过这个异常和隐藏它 2) 完全修复它?

我确实看到了将 max_file_size 和 post_max_size 等更改为更高值并重新启动 Apache 的解决方案。我试过了,但它也没有用......而且看起来没有任何明确的解决方案。

这是我的控制器上用于上传功能的内容

public function fileUpload(Request $request) {
        $this->validate($request, [
            'img' => 'required|image|mimes:jpeg,png,jpg,',
        ]);

        if ($request->hasFile('img')) {
            $image = $request->file('img');
            $size = $image->getSize();
            $characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
            $charactersLength = strlen($characters);
            $randomString = '';
            for ($i = 0; $i < 5; $i++) {
                $randomString .= $characters[rand(0, $charactersLength - 1)]; // Generate random 5 character name...
            }
            $name = $randomString.'.'.$image->getClientOriginalExtension();
            $destinationPath = public_path('storage'.'\\'.$request->input('post'));

            // Store Image Information //
            $data = new Photo();
            // Get post number //
            $data->order = $request->input('post');
            $data->filename = $name;
            $data->location = $destinationPath;
            $data->save();

            // Now move to the destination path //
            $image->move($destinationPath, $name);

            return refresh();
        }
    }

我正在使用 MySQL 来存储照片信息,例如图像与哪个帖子相关联、控制器生成的文件名以及图像在机器中的存储位置......如您所见,我正在创建单独的文件夹对于每个职位出于组织目的...

目标是至少禁用异常原因,否则整个工作正常......理论上我应该在上传完成后刷新页面。

标签: phplaravelsymfonyfile-uploadxampp

解决方案


伙计们,我想通了...

可能需要在 Laravel 中进行一次小更新来解决这个问题……因为这是一个奇怪的“错误”。

因此,显然,getSize();在我的情况下,您必须执行一个 ,$size = $image->getSize();并将该值存储在某个地方,无论它是否在 SQL 数据库中……即使您不需要数据……只需将其存储为变量就会引发错误。

一旦我这样做return $size了,错误就会消失并返回图像大小的字节值......当我将它作为 mySQL 值存储在列中时,问题不再存在......

我希望这可以帮助别人。哈哈。如果您遇到这个问题并且您不明白,我会很乐意解释。:)


推荐阅读