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

Laravel集成laravel-getid3处理多音频文件元数据问题求助

问题修复方案

你遇到的报错核心原因是注释段代码中实例化getID3时,传入的是整个多文件上传数组$request->file('songs'),而非循环内当前遍历的单个文件对象,和扩展本身是否支持多文件无关,只需调整调用逻辑即可。

修复后完整代码

public function store(Request $request)
{
    $input = $request->all();

    if($request->hasfile('songs')){
        foreach ($request->file('songs') as $uploadFile) {
            // 先获取当前单个文件的临时路径用于提取元数据
            $trackInfo = new \getID3($uploadFile->getPathname());
            $tifo = $trackInfo->extractInfo();
            // 打印元数据查看可提取字段,比如时长、歌手、专辑等
            // print_r($tifo);

            $nametag = $uploadFile->getClientOriginalName();
            $name = explode('.',$nametag)[0];
            $extension = $uploadFile->extension();
            $filesize = $uploadFile->getSize();
            $saveFileName = time() . uniqid() . '.' . $extension;
            $location = $saveFileName;
            $uploadFile->storeAs('public/songs', $saveFileName);

            $musicRecord = new MusicUpload();              
            $musicRecord->user_id = Auth::user()->id;
            $musicRecord->filename = $name;
            // 可新增字段存储提取到的元数据,例如下方的时长字段
            // $musicRecord->duration = $tifo['playtime_seconds'] ?? 0;
            // $musicRecord->artist = $tifo['tags']['id3v2']['artist'][0] ?? '未知歌手';
            $musicRecord->extension = $extension;
            $musicRecord->filesize = $filesize;
            $musicRecord->location = $location;
            $musicRecord->save();
        }
    }

    return response()->json([
        'uploaded' => true
    ]);
}

核心修改说明

  • 修正getID3传参:循环内传入当前单个文件的临时路径$uploadFile->getPathname(),避免传入多文件数组导致报错
  • 删除冗余逻辑:原有代码中$datas数组存在重复覆盖同一键名的问题,内层遍历$datas的逻辑完全多余,直接在循环内给模型赋值即可
  • 避免变量冲突:将循环内的文件对象和模型对象变量名拆分,避免后续逻辑覆盖文件对象

替代实现方案

如果需要支持更多音频格式、提取更全面的元数据,可使用php-ffmpeg扩展替代laravel-getid3,该扩展基于FFmpeg,可覆盖绝大多数音视频格式的元数据提取需求,调用逻辑和上述方案类似,只需在循环内逐个传入单个文件即可。

内容的提问来源于stack exchange,提问作者throwawaydev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 22:09:00