Laravel 文件未保存但记录在数据库中

Laravel file not saved but recorded in database

我正在接受一个文件和一些其他参数。我验证文件和参数,然后在数据库中创建记录的同时存储文件。很标准的东西。我遇到的问题是我的大部分文件和记录都得到了保存,但有时数据库中存在一条记录,但没有与之关联的文件被保存。我试过复制它,但我没能做到。我不知道错误是我的代码、我的服务器还是用户过早断开连接或其他类似问题。

我 运行 Laravel 7 在 AWS Lightsail 实例上使用 Bitnami LAMP 堆栈。

控制器中的存储方法

public function store(StoreRequest $request)
{
    $filePath = $request
        ->file('file')
        ->storeAs(
            'path',
            Str::upper($request->input('param1')) .
                "_{$request->input('param2')}_{$request->input(
                    'param3'
                )}_{$request->input('param4')}_{$request->input(
                    'param5'
                )}_" .
                now()->format('Ymd_Hi') .
                ".{$request->file('file')->getClientOriginalExtension()}",
            'public'
        );

    Storage::setVisibility('public/' . $filePath, 'private');

    $record = Model::create(
        array_merge($request->all(), ['file' => $filePath])
    );

    return redirect()
        ->back()
        ->with('message', 'File submitted successfully');
}

StoreRequest 中的规则

public function rules()
{
    $rules = [
        //rules for other parameters
        'filetype' => ['required', 'string'],
    ];

    if (request('filetype') === 'video') {
        $rules['file'] = [
            'required',
            'file',
            'mimetypes:video/*',
            'max:200000',
        ];
    } elseif (request('filetype') === 'image') {
        $rules['file'] = ['required', 'file', 'image', 'max:20000'];
    }

    return $rules;
}

我在数据库中有 259 条记录,但我只收到 247 个文件。错误可能出在哪里?我试过我的开发环境,但我无法重现这样的错误。这与我的 php.ini 设置有关吗?这是用户造成的吗?记录入库前保存文件怎么会没有保存呢?

pho.ini 文件中有两个选项。一个是 upload_max_filesize,另一个是 post_max_size。上传文件时,我认为它超过了 ini 文件中定义的大小。 如果您的视频大小为 200 MB,那么 upload_max_size 应该大于或等于 200 MB。 post_max_size 是要提交的表单的总大小。设置大小大于 upload_max_size.

更安全

您使用的 Ymd_Hi 不允许在同一分钟内保存任何记录,可能使用时间字符串或也包括秒数,但请注意,如果您使用秒数,您可能会遇到同样的问题!