如何获取表单中用户上传文件的内容(不存入数据库)
解决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
相关产品推荐
相关产品推荐

