You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中使用File::files()返回空对象数组的问题排查

Laravel中使用File::files()返回空对象数组的问题排查

嗨,我来帮你捋清楚这个问题~

你遇到的情况其实很常见:File::files($path)返回的并不是普通的数组或字符串,而是SplFileInfo对象的集合。这些对象的内部属性大多是受保护或私有的,当你直接用response()->json($files)返回时,PHP的JSON序列化机制只会处理对象的公开属性,所以最终返回的JSON里就显示成了空对象,但数组的长度是对的——因为确实有对应数量的SplFileInfo实例存在。

解决方法:手动提取需要的文件信息

你需要把每个SplFileInfo对象转换成包含公开可访问属性的关联数组,这样JSON序列化就能正确展示内容了。可以用Laravel集合的map方法来处理:

$path = storage_path('path/to/folder/' . $request->folder);

$files = File::files($path)->map(function($file) {
    return [
        'filename' => $file->getFilename(), // 仅文件名
        'full_path' => $file->getPathname(), // 文件完整路径
        'size' => $file->getSize(), // 文件大小(字节)
        'extension' => $file->getExtension(), // 文件扩展名
        'last_modified' => $file->getMTime(), // 最后修改时间(时间戳)
        // 还可以根据需求添加其他方法返回的信息
    ];
});

return response()->json($files, 200);

验证小技巧

你可以在代码里先加上dd($files)来查看原始的SplFileInfo对象:

$files = File::files($path);
dd($files);

这时候你会看到每个对象都包含了文件的详细信息,只是直接转JSON时无法序列化这些非公开属性而已。

备注:内容来源于stack exchange,提问作者cwmd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:19:52