如何在laravel Storage中按名称查找文件而没有特定的扩展名?
喜欢这个public object UpdateMapFetcher(int stationID, int typeID)
"filename.*"
我试过这个,但似乎没有用。它搜索具有特定扩展名的特定文件。
答案 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...
}
}
这样我们就可以安全地获取文件或图像。