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

Laravel 7多独立文件上传故障:仅获取首个文件如何解决?

多文件上传仅能获取首个文件的问题排查与解决

问题描述

在表单中设置了三个独立的文件输入框(photo、nid、passport),提交表单时仅能获取第一个输入框的文件,调整输入框顺序后仍仅获取首个字段的值。

表单代码

<form action="{{ route('apply.store') }}" method="POST" enctype="multipart/form-data">
    <div class="form-group">
        <label for="">Profile</label>
        <input type="file" name="photo" accept="image/*" required>
    </div>
    <div class="form-group">
        <label for="">NID</label>
        <input type="file" name="nid" accept="image/*" required>
    </div>
    <div class="form-group">
        <label for="">Passport</label>
        <input type="file" name="passport" accept="image/*" required>
    </div>
</form>

控制器代码

if ($request->hasFile('photo')) {
    $file = $request->photo ;
    $destination_path = 'files/uploads/';
    $filename = date('Ymdhis'). rand(10,99) . '_' . $file->getClientOriginalName();
    $file->move($destination_path, $filename);
    $apply->photo = $filename;
}
if ($request->hasFile('nid')) {
    $file = $request->nid ;
    $destination_path = 'files/uploads/';
    $filename = date('Ymdhis'). rand(10,99) . '_' . $file->getClientOriginalName();
    $file->move($destination_path, $filename);
    $apply->nid = $filename;
}
if ($request->hasFile('passport')) {
    $file = $request->passport ;
    $destination_path = 'files/uploads/';
    $filename = date('Ymdhis'). rand(10,99) . '_' . $file->getClientOriginalName();
    $file->move($destination_path, $filename);
    $apply->passport = $filename;
}

解决方案

1. 补充Laravel表单必备的CSRF令牌

Laravel的POST表单必须包含CSRF令牌,否则请求会被框架拦截,可能导致数据不全或丢失。修改表单代码,添加@csrf指令:

<form action="{{ route('apply.store') }}" method="POST" enctype="multipart/form-data">
    @csrf
    <div class="form-group">
        <label for="">Profile</label>
        <input type="file" name="photo" accept="image/*" required>
    </div>
    <div class="form-group">
        <label for="">NID</label>
        <input type="file" name="nid" accept="image/*" required>
    </div>
    <div class="form-group">
        <label for="">Passport</label>
        <input type="file" name="passport" accept="image/*" required>
    </div>
</form>

2. 检查PHP文件上传配置

如果添加CSRF令牌后问题仍存在,检查PHP配置文件(php.ini)中的以下参数,确保总上传大小足够容纳三个文件:

  • upload_max_filesize: 单个文件的最大允许大小,建议设置为10M或更大
  • post_max_size: POST请求的总数据大小,必须大于upload_max_filesize,建议设置为20M或更大

修改后重启Web服务器生效。

3. 调试排查接收情况

可以在控制器开头添加调试代码,查看请求实际接收到的文件:

// 打印所有接收到的文件
dd($request->files);

通过输出结果确认哪些文件被正确接收,进一步定位问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:20:52