Laravel 8 API+Postman文件上传提示Call to a member function storeAs() on null错误
错误原因
你遇到的Call to a member function storeAs() on null错误,核心原因是Laravel无法从请求中获取到名为csv的上传文件,对应Postman配置存在以下几类问题:
需修正的Postman配置项
- 请求头配置错误:不要手动设置
Content-Type请求头。上传文件使用form-data格式时,Postman会自动生成带boundary参数的multipart/form-data类型请求头,手动填写(比如误设为application/json、或者手动写不带boundary的multipart/form-data)都会导致Laravel无法正常解析表单上传的文件。 - 表单参数配置错误:进入Postman的
Body选项卡,选择form-data类型:- 第一行的KEY字段填入
csv,需和你控制器中$request->file('csv')的参数名完全一致 - 点击KEY字段右侧的下拉箭头,将默认的
Text类型改为File - 点击VALUE列的「选择文件」按钮,选中你要上传的CSV文件即可
- 第一行的KEY字段填入
优化建议(可选)
你可以在控制器中先增加文件存在性校验,避免空调用报错:
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Storage; use Illuminate\Http\Request; class CsvController extends Controller { /** * Import CSV * * @param Request $request * @return Response */ public function import(Request $request) { // 增加上传校验 $validated = $request->validate([ 'csv' => 'required|file|mimes:csv,txt|max:10240', // 限制文件类型、大小按需调整 ]); $someID = 5; // 建议补充文件后缀,避免存储为无后缀文件 $path = $request->file('csv')->storeAs( 'bulk-csvs', $someID . '.csv' ); return response()->json([ 'file_path' => $path, 'success' => true, 'message' => 'CSV imported' ], 200); } }
如果你的接口放在web.php路由文件中,还需要在Postman的Headers选项卡增加X-CSRF-TOKEN参数,值填写Laravel生成的CSRF令牌;如果放在api.php路由文件下则无需配置。
内容的提问来源于stack exchange,提问作者Ryan H
相关产品推荐
相关产品推荐

