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

Laravel测试文件上传时$request->file('file')返回null问题

错误原因
  • 模拟文件被错误传入route()辅助函数的路径参数数组中,没有作为POST请求的上传文件提交。

route()的第二个参数仅用于匹配路由定义中的路径占位符,不会被解析为请求上传文件。你当前的写法相当于把文件对象转成了路径参数的字符串值,自然无法通过$request->file()获取到UploadedFile实例,只能拿到文件名片段。

修正方法

调整测试请求的参数传值位置:路由路径参数放在route()的第二个参数中,POST请求的表单字段、上传文件统一作为$this->post()方法的第二个参数传入。

修正后的测试代码如下:

test('can upload file', function () {
  Storage::fake('local');

  $file = UploadedFile::fake()->image('avatar.jpg');

  // 无路径参数时route第二个参数传空数组,文件放到post方法的第二个参数位
  $this->post(
      route('admin.ajax.files.store', []),
      ['file' => $file]
  );

  // 控制器中补充对应的文件存储逻辑后即可通过断言,示例存储逻辑:
  // $request->file('file')->store('/');
  Storage::disk('local')->assertExists($file->hashName());
});

如果目标路由本身带路径占位符,比如路由定义为admin/ajax/files/{group}/store,只需把路径占位符对应的参数放到route()的参数数组中即可,请求文件仍然放在post的第二个参数位,示例:

// 路由带路径参数的场景
$this->post(
    route('admin.ajax.files.store', ['group' => 'avatar']),
    ['file' => $file]
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:18:26