大侠请留步,且看我这个怪异的文件上传:The file "/tmp/phpQYktzX" does not exist ???


问题描述

事情是这样的,我通过表单上传图片,得到了标题里的那个错误,但其实**文件已经上传成功**了,而且奇怪的地方在于我如果使用 `dd()` 方法查看的话是没问题的,不会报错。然后我把打印函数去掉,正常做路由跳转就会报错,下面给出比较详细的代码截图。

处理表单上传图片的代码

1240

上图中打印的结果

1240

高潮到了:如果我把第一张图里的打印函数都去掉,正常做路由跳转,则报错如下图

1240

一直报错  `The file "/tmp/XXXXXX" does not exist` 。

ImageUploadHandler.php

```php

namespace App\Handlers;

class ImageUploadHandler
{
    // 只允许以下后缀名的图片文件上传
    protected $allowed_ext = ["png", "jpg", "gif", 'jpeg'];
    
    public function save($file)
    {
        // 构建存储的文件夹规则
        // 文件夹切割能让查找效率更高。
        $folder_name = "uploads/images/" . date("Ym/d", time());
        
        // 文件具体存储的物理路径,`public_path()` 获取的是 `public` 文件夹的物理路径。
        $upload_path = public_path() . '/' . $folder_name;
        
        // 获取文件的后缀名,因图片从剪贴板里黏贴时后缀名为空,所以此处确保后缀一直存在
        $extension = strtolower($file->getClientOriginalExtension()) ?: 'png';
        
        // 值如:14935210507BVc9v9ujP.png
        $filename = time() . str_random(20) . '.' . $extension;
        
        // 如果上传的不是图片将终止操作
        if (!in_array($extension, $this->allowed_ext)) {
            return false;
        }
        
        // 将图片移动到我们的目标存储路径中
        $file->move($upload_path, $filename);
        
        $imageSize = getimagesize($upload_path . '/' . $filename);
        
        return [
            'name' => $filename,
            'path' => "/{$folder_name}/{$filename}",
            'extension' => $extension,
            'original_name' => $file->getClientOriginalName(),
            'width' => $imageSize[0],
            'height' => $imageSize[1],
        ];
    }
}
```

补充描述

1. 我在本地是完全没有问题的,本地开发环境是 Homestead。
2. 服务器是 CentOS 7.4 版本。
3. PHP Version:7.2.6
4. Laravel Version:5.7.13

搞了好几个小时,没什么思路了,有大侠愿意帮忙分析一下吗?

如果缺少什么信息请留言,我会补充,谢谢!

Vote Vote Cancel Collect Collect Cancel

<< 上一篇: 关于laradock的使用问题

>> 下一篇: 关于npm run dev