Laravel, 如何根据文件名中的特定模式查找上传的文件?
Laravel, How to Find Uploaded Files by Specific Pattern in The Files' Name?
首先解释一下我的问题是什么意思,当我将文件上传到本地存储时,我按以下方式保存它们:
$files = $request->file('files');
if ($request->hasFile('files')) {
foreach ($files as $file) {
//Get filename with the extension
$fileNameWithExt = $file->getClientOriginalName();
//Filename to store example: lead_4_document.pdf
$fileNameToStore = 'lead_' . $lead->id . '_' . $fileNameWithExt;
//Upload image
$path = $file->storeAs('/user_uploads', $fileNameToStore);
$lead->uploadFile()->create(array('filename' => $fileNameToStore, 'file_url' => $path, 'lead_id' => $lead->id));
}
}
所以基本上我将 lead_ 的 lead_id 和另一个 _ 添加到文件在上传过程中最初调用的任何内容。我现在面临的问题是我需要根据我的潜在客户 ID 检索关联的文件。到目前为止,这是我的尝试:
$searchParam = 'lead_'.$lead->id.'_';
//$fileNames = File::glob('storage/user_uploads/'.$searchParam.'*');
//$files = File::get($fileNames);
$allFiles = Storage::files('user_uploads');
dd($allFiles);
澄清一下,'File::glob' 方法似乎可行,尽管它只输出文件名而不是实际文件作为对象,这正是我需要的。
好的,所以我退后一步,着手处理整个相关的上传文件,以不同的方式引导关系。这就是我的做法,以防万一有人偶然发现这个并发现自己和我在同一条船上。
文件上传现在做了一些事情:
//check if file(s) is present in the request
if ($request->hasFile('files')) {
//checks if a directory already exists for a given lead (by id)
if (Storage::exists('/leads/'.$request->lead_id)) {
//if yes set the directory path to the existing folder
$directory = '/leads/'.$request->lead_id;
}
else {
//if not create a new directory with the lead id
Storage::makeDirectory('/leads/'.$request->lead_id);
$directory = '/leads/'.$request->lead_id;
}
foreach ($files as $file) {
//Get filename with the extension
$fileNameWithExt = $file->getClientOriginalName();
//Filename to store example: lead_4_document.pdf
$fileNameToStore = 'lead_' . $lead->id . '_' . $fileNameWithExt;
//Upload image
//'/user_uploads'
$file->storeAs($directory, $fileNameToStore);
//$lead->uploadFile()->create(array('filename' => $fileNameToStore, 'file_url' => $path, 'lead_id' => $lead->id));
}
}
所以本质上,我不是试图将所有文件放入一个文件夹然后检查单个文件的 'lead_##' 前缀,而是创建一个带有 lead id 的文件夹,然后我使用在我的视图函数中遵循以下方式:
$directory = '/leads/'.$lead->id;
if (Storage::exists($directory)) {
$files = File::files('storage/'.$directory);
}
else {
$files = '';
}
简单地检查目录是否存在给定的潜在客户 ID,然后如果有上传的文件,要么为其分配内容,要么将其设置为空白(这用于在我的页面上显示 'attachments' 部分,如果不为空)。
首先解释一下我的问题是什么意思,当我将文件上传到本地存储时,我按以下方式保存它们:
$files = $request->file('files');
if ($request->hasFile('files')) {
foreach ($files as $file) {
//Get filename with the extension
$fileNameWithExt = $file->getClientOriginalName();
//Filename to store example: lead_4_document.pdf
$fileNameToStore = 'lead_' . $lead->id . '_' . $fileNameWithExt;
//Upload image
$path = $file->storeAs('/user_uploads', $fileNameToStore);
$lead->uploadFile()->create(array('filename' => $fileNameToStore, 'file_url' => $path, 'lead_id' => $lead->id));
}
}
所以基本上我将 lead_ 的 lead_id 和另一个 _ 添加到文件在上传过程中最初调用的任何内容。我现在面临的问题是我需要根据我的潜在客户 ID 检索关联的文件。到目前为止,这是我的尝试:
$searchParam = 'lead_'.$lead->id.'_';
//$fileNames = File::glob('storage/user_uploads/'.$searchParam.'*');
//$files = File::get($fileNames);
$allFiles = Storage::files('user_uploads');
dd($allFiles);
澄清一下,'File::glob' 方法似乎可行,尽管它只输出文件名而不是实际文件作为对象,这正是我需要的。
好的,所以我退后一步,着手处理整个相关的上传文件,以不同的方式引导关系。这就是我的做法,以防万一有人偶然发现这个并发现自己和我在同一条船上。 文件上传现在做了一些事情:
//check if file(s) is present in the request
if ($request->hasFile('files')) {
//checks if a directory already exists for a given lead (by id)
if (Storage::exists('/leads/'.$request->lead_id)) {
//if yes set the directory path to the existing folder
$directory = '/leads/'.$request->lead_id;
}
else {
//if not create a new directory with the lead id
Storage::makeDirectory('/leads/'.$request->lead_id);
$directory = '/leads/'.$request->lead_id;
}
foreach ($files as $file) {
//Get filename with the extension
$fileNameWithExt = $file->getClientOriginalName();
//Filename to store example: lead_4_document.pdf
$fileNameToStore = 'lead_' . $lead->id . '_' . $fileNameWithExt;
//Upload image
//'/user_uploads'
$file->storeAs($directory, $fileNameToStore);
//$lead->uploadFile()->create(array('filename' => $fileNameToStore, 'file_url' => $path, 'lead_id' => $lead->id));
}
}
所以本质上,我不是试图将所有文件放入一个文件夹然后检查单个文件的 'lead_##' 前缀,而是创建一个带有 lead id 的文件夹,然后我使用在我的视图函数中遵循以下方式:
$directory = '/leads/'.$lead->id;
if (Storage::exists($directory)) {
$files = File::files('storage/'.$directory);
}
else {
$files = '';
}
简单地检查目录是否存在给定的潜在客户 ID,然后如果有上传的文件,要么为其分配内容,要么将其设置为空白(这用于在我的页面上显示 'attachments' 部分,如果不为空)。