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 不允许在同一分钟内保存任何记录,可能使用时间字符串或也包括秒数,但请注意,如果您使用秒数,您可能会遇到同样的问题!
我正在接受一个文件和一些其他参数。我验证文件和参数,然后在数据库中创建记录的同时存储文件。很标准的东西。我遇到的问题是我的大部分文件和记录都得到了保存,但有时数据库中存在一条记录,但没有与之关联的文件被保存。我试过复制它,但我没能做到。我不知道错误是我的代码、我的服务器还是用户过早断开连接或其他类似问题。
我 运行 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 不允许在同一分钟内保存任何记录,可能使用时间字符串或也包括秒数,但请注意,如果您使用秒数,您可能会遇到同样的问题!