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

如何获取表单中用户上传文件的内容(不存入数据库)

解决Laravel中获取上传文件内容的问题

问题原因

你用$req->input('file')只能拿到文件名,是因为上传文件的信息不会通过常规input参数传递,Laravel会将上传的文件封装成UploadedFile实例,需要用专门的方法获取。

必要前提:表单配置

首先确保你的表单添加了enctype="multipart/form-data"属性,否则文件根本无法上传到后端:

<form method="POST" action="/你的路由地址" enctype="multipart/form-data">
    @csrf
    <input type="file" required class="form-control" accept=".xml" id="file" name="file" multiple>
    <button type="submit">上传文件</button>
</form>

控制器中获取文件内容的方法

因为你的input设置了multiple,前端会传递文件数组,需要循环处理每个文件:

public function loadData(Request $req) {
    // 检查是否有上传文件
    if ($req->hasFile('file')) {
        $files = $req->file('file');
        
        foreach ($files as $file) {
            // 验证文件上传是否有效
            if ($file->isValid()) {
                // 方式1:通过UploadedFile实例的get()方法直接读取内容
                $content = $file->get();
                
                // 方式2:读取文件临时路径获取内容
                // $content = file_get_contents($file->getPathname());
                
                // 这里可以对内容做处理,比如直接返回给前端
                dd($content); // 测试用,实际可替换为return响应
            }
        }
    }
    
    return response()->json(['msg' => '未上传有效文件']);
}

额外补充

  • 若不需要多文件上传,去掉input的multiple属性,控制器直接用$file = $req->file('file')即可,无需循环。
  • 可添加文件验证确保上传的是XML文件:
    $req->validate([
        'file' => 'required|array',
        'file.*' => 'file|mimes:xml'
    ]);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 20:55:59