【问题标题】:Laravel, How to Find Uploaded Files by Specific Pattern in The Files' Name?Laravel,如何通过文件名中的特定模式查找上传的文件?
【发布时间】:2020-09-17 10:33:24
【问题描述】:

首先要解释一下我的问题是什么意思,当我将文件上传到本地存储时,我会通过以下方式保存它们:

$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_ 前缀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' 方式似乎有效,尽管它只输出文件名而不是实际文件作为对象,这正是我所需要的。

【问题讨论】:

    标签: php laravel download upload


    【解决方案1】:

    好的,所以我退后一步,着手处理整个相关的上传文件,以不同的方式引导关系。这就是我的做法,以防万一有人偶然发现并发现自己和我在同一条船上。 文件上传现在做了几件事:

    //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_##”前缀,而是创建一个带有潜在客户 ID 的文件夹,然后我使用以下方式在我看来功能:

     $directory = '/leads/'.$lead->id;
    
            if (Storage::exists($directory)) {
                $files = File::files('storage/'.$directory);
            }
            else {
                $files = '';
            }
    

    只需检查具有给定潜在客户 ID 的目录是否存在,然后如果有上传的文件,要么为其分配内容,要么将其设置为空白(如果不为空,这用于在我的页面上显示“附件”部分)。

    【讨论】:

      猜你喜欢
      • 2013-04-04
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 2017-09-19
      • 2017-08-17
      • 1970-01-01
      相关资源
      最近更新 更多