如何在laravel存储中找到没有特定文件扩展名的文件?

时间:2016-08-22 05:30:59

标签: php laravel laravel-5 storage

如何在laravel Storage中按名称查找文件而没有特定的扩展名?

喜欢这个public object UpdateMapFetcher(int stationID, int typeID)

"filename.*"

我试过这个,但似乎没有用。它搜索具有特定扩展名的特定文件。

4 个答案:

答案 0 :(得分:7)

存储:: get()将文件路径作为参数并返回由此路径标识的单个文件的内容,如果文件可以&#39则抛出 FileNotFoundException 找不到。

路径不支持通配符 - 原因之一可能是可能存在多个与通配符路径匹配的文件,这会破坏从单个文件的内容返回的规则存储::得到()。扫描整个文件夹的速度也会慢得多,尤其是对于远程存储设备。

但是,您可以使用存储门面提供的其他功能获得所需内容。首先,列出存储的内容 - 这将为您提供所有可用文件的列表。然后自己过滤列表以获取匹配文件列表。

// list all filenames in given path
$allFiles = Storage::files('');

// filter the ones that match the filename.* 
$matchingFiles = preg_grep('/^filename\./', $allFiles);

// iterate through files and echo their content
foreach ($matchingFiles as $path) {
  echo Storage::get($path);
}

答案 1 :(得分:0)

不要相信你所看到的。进入内部并获取文件的分机

$pic = 'url/your.file';
$ext = image_type_to_mime_type(exif_imagetype($pic));
$ext = explode('/',$ext);
echo $ext[1];

答案 2 :(得分:0)

接受的解决方案有效。但是,我发现了另一个,我更喜欢它:

$matchingFiles = \Illuminate\Support\Facades\File::glob("{$path}/*.log");

参见此处的参考资料: http://laravel-recipes.com/recipes/143/finding-files-matching-a-pattern

答案 3 :(得分:0)

对 jedrzej.kurylo 的回答进行了小改动,并使用 laravel 8 结合了 wogsland 的回答:

'/^filename\./''/filename\./' 模式在我的情况下不起作用。

<块引用>

// 来自:

$matchingFiles = preg_grep('/^filename./', $allFiles);

// To:
$allFiles = Storage::disk('yourStorageDisk')->files('folder/path');
$allowedMimeTypes = ['image/jpeg', 'image/png', 'image/webp'];
$matchingFiles = preg_grep('{'.$image.'}', $allFiles);

foreach ($matchingFiles as $path) {
    // get real mime type
    $contentType = image_type_to_mime_type(exif_imagetype(asset($path)));

    // compare it with our allowed mime types
    if (in_array($contentType, $allowedMimeTypes)) {
        // do something here...
    }
}

这样我们就可以安全地获取文件或图像。