如何从Laravel上传多个文件到Lumen API?

问题描述

我有一个Lumen API,路线如下:

$router->group(['prefix' => 'api/v1'],function() use ($router) {
        $router->group(['prefix' => 'user'],function() use ($router) {
                $router->post('/fund','User\FundsController@create');
        });
});

此路由接受2个文件。控制器代码如下:

public function create(Request $request) {
        $validator = Validator::make($request->all(),[
                'field1' => 'required|string|exists:colleges,id','field2' => 'required|string|max:250','field3' => 'required|date','field4' => 'required|date','file1'  => 'required|file','file2'  => 'required|file'
        ]);

        if ($validator->fails()) {
                return response()->json(['status' => false,'message' => $validator->errors()],409);
        }

        try {
                $filename1 = $this->uploadFile1($request);
                $filename2 = $this->uploadFile2($request);

                $event         = new Event;
                $event->id     = Str::random(24);
                $event->field1 = $request->input('field1');
                $event->field2 = $request->input('field2');
                $event->field3 = $request->input('field3');
                $event->field4 = $request->input('field4');
                $event->file1  = $filename1;
                $event->file2  = $filename2;
                $event->save();

                return response()->json(['status' => true,'message' => 'Event saved successfully'],201);
        } catch (\Exception $e) {
                return response()->json(['status' => false,'message' => 'Event Couldn\'t be saved'],409);
        }
}

它已被邮递员成功测试。

但是,我无法从Laravel应用程序向此API发出请求。控制器代码为:

public function addFund(Request $request) {
        // OPTION 1: USING LaraVEL HTTP CLIENT

        $responSEObj = Http::attach(
                'file1',$request->file('fileinput1')
        )->post('http://localhost:8001/api/v1/user/fund',[
                'field1' => session('id'),'field2' => $request->input('textinput1'),'field3' => $request->input('textinput2'),'field4' => $request->input('textinput3')
        ]);
        $responseJson = $responSEObj->json();

        if ($responSEObj->status() == 200) {
                return response()->json([
                        'status'  => true,'message' => $responseJson['message']
                ]);
        } else {
                return response()->json([
                        'status' => false,'errors' => $responseJson['message']
                ]);
        }

        // OPTION 2: USING GUZZLE HTTP CLIENT

        $client = new Client();
        $responSEObj = $client->request('POST','http://localhost:8001/api/v1/user/fund',[
                'multipart' => [
                        [
                                'name'     => 'field1','contents' => session('id')
                        ],[
                                'name'     => 'field2','contents' => $request->input('textinput1')
                        ],[
                                'name'     => 'field3','contents' => $request->input('textinput2')
                        ],[
                                'name'     => 'field4','contents' => $request->input('textinput3')
                        ],[
                                'name'     => 'file1','contents' => $request->file('fileinput1')
                        ],[
                                'name'     => 'file2','contents' => $request->file('fileinput2')
                        ]
                ]
        ]);

        if ($responSEObj->getStatusCode() == 200) {
                return response()->json([
                        'status'  => true,'message' => json_decode($responSEObj->getBody()->getContents(),true)
                ]);
        } else {
                return response()->json([
                        'status' => false,'errors' => json_decode($responSEObj->getBody()->getContents(),true)
                ]);
        }
}

请注意,我在这里只使用了选项1或选项2。但是两者都失败了,错误消息为:

{
        "status"  : false,"message" : {
                "file1" : [
                        "The file1 must be a file."
                ],"file2" : [
                        "The file2 must be a file."
                ]
        }
}

所以我需要的是这个。通过Laravel Controller将多个文件(您从网页接收到的)传递到Lumen端点的正确方法是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)