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

如何解决如何从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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?