已经在这个问题上工作了 2 天,但仍然无法弄清楚。我正在尝试将多个文件上传到我的 Laravel 项目中的存储中。我知道我的代码适用于 foreach,因为我用 dd 对此进行了测试。
我的控制器:
$files = $request->file('current_plan_year_claims_data_file_1');
$folder = public_path(). "\storage\\$id";
if (!File::exists($folder)) {
File::makeDirectory($folder, 0775, true, true);
}
if (!empty($files)) {
foreach($files as $file) {
Storage::disk(['driver' => 'local', 'root' => $folder])->put($file->getClientOriginalName(), file_get_contents($file));
}
}
Run Code Online (Sandbox Code Playgroud)
我看你是想直接把文件存到文件public夹里,为什么不用StorageLaravel的API,用公盘呢?您可以执行以下操作将文件上传到公共目录:
$id = 123;
$files = $request->file();
$folder = $id;
if (count($files) > 0) {
foreach ($files as $file) {
$file->store($folder, ['disk' => 'public']);
}
}
Run Code Online (Sandbox Code Playgroud)
并确保您已将存储路径链接到公共:
php artisan storage:link
Run Code Online (Sandbox Code Playgroud)
专注于$files = $request->file();线。当您不向file()方法传递参数时,将返回所有上传的文件实例。现在,当您遍历$files数组时,您将可以访问各个上传的文件。
然后您可以使用您的逻辑存储文件,即您可以使用原始名称或其他任何名称。甚至您可以使用Storage外观来处理文件实例。
即如果你想用它们的原始名称存储文件,我发现这是一种更清晰的方式,而不是你在做什么:
$id = 123;
$files = $request->file();
$folder = $id;
if (count($files) > 0) {
foreach ($files as $file) {
Storage::disk('public')->putFileAs(
$folder,
$file,
$file->getClientOriginalName()
);
}
}
Run Code Online (Sandbox Code Playgroud)
正如@cbaconnier 所建议的,您也可以使用allFiles()更具描述性的方法:
$files = $request->allFiles();
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助。
| 归档时间: |
|
| 查看次数: |
1419 次 |
| 最近记录: |