解析multipart / form

编程入门 行业动态 更新时间:2024-10-22 23:40:07
解析multipart / form-data cakephp 3(Parse multipart/form-data cakephp 3)

我目前正在尝试解析我通过Chrome中的Postman插件发送的multipart/form-data 。 但是,我得到以下输出:

'------WebKitFormBoundarymsXhoqlRBbTbsZFb Content-Disposition: form-data; name="album_id" 2 ------WebKitFormBoundarymsXhoqlRBbTbsZFb Content-Disposition: form-data; name="description" haiahaahahahdaisdhisadhisadihsdhiiahsd ------WebKitFormBoundarymsXhoqlRBbTbsZFb Content-Disposition: form-data; name="favorite" true ------WebKitFormBoundarymsXhoqlRBbTbsZFb Content-Disposition: form-data; name="uploadfile"; filename="test2.txt" Content-Type: text/plain Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ------WebKitFormBoundarymsXhoqlRBbTbsZFb Content-Disposition: form-data; name="uploadfile"; filename="test.txt" Content-Type: text/plain Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ------WebKitFormBoundarymsXhoqlRBbTbsZFb-- '

当我尝试调试$this->request->input()时,我得到了这个输出。 当我尝试$this->request->input('json_decode')我得到一个空数组,所以我假设数据格式不正确(只是一个字符串)。 在我编写自己的算法之前,我想确定我不是用这个重新发明轮子。 我做错了什么? 或者如果没有,是否存在一些Cakephp 3函数来处理这个问题?

更新 我发现我的代码出了什么问题,似乎路由过程以某种方式将post数组清空。 当我尝试使用以下端点的Postman http://vecto.app/api/pictures $ this-> request-> data为空。 但是,当我尝试访问端点http://vecto.app/pictures时 ,$ this-> request->数据将填充信息。 有谁知道以下路由设置有什么问题:

Router::prefix('api', function ($routes) { $routes->extensions(['json', 'xml']); $routes->resources('Users'); $routes->resources('Pictures'); // We connect the /register action so we can simply extend the CRUD Plugin add() method // and benefit of already available logic like validation and response codes instead of having to reinvent the wheel. Router::connect('/api/users/register', ['controller' => 'Users', 'action' => 'add', 'prefix' => 'api']); $routes->fallbacks('InflectedRoute'); });

I'm currently trying to parse the multipart/form-data that I send through Postman plugin in Chrome. However, I get the following output:

'------WebKitFormBoundarymsXhoqlRBbTbsZFb Content-Disposition: form-data; name="album_id" 2 ------WebKitFormBoundarymsXhoqlRBbTbsZFb Content-Disposition: form-data; name="description" haiahaahahahdaisdhisadhisadihsdhiiahsd ------WebKitFormBoundarymsXhoqlRBbTbsZFb Content-Disposition: form-data; name="favorite" true ------WebKitFormBoundarymsXhoqlRBbTbsZFb Content-Disposition: form-data; name="uploadfile"; filename="test2.txt" Content-Type: text/plain Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ------WebKitFormBoundarymsXhoqlRBbTbsZFb Content-Disposition: form-data; name="uploadfile"; filename="test.txt" Content-Type: text/plain Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ------WebKitFormBoundarymsXhoqlRBbTbsZFb-- '

This output do I get when I try to debug $this->request->input(). When I try $this->request->input('json_decode') I get an empty array, so I'm assuming that the data isn't in a proper format (just a string). Before I write my own algorithm I want to be sure that I'm not reinventing the wheel with this one. I'm doing something wrong? Or if not, does there exist some Cakephp 3 function which takes care of this?

Update I found what is wrong in my code and it seems like the routing process somehow empties the post array to early. When I try Postman with the following endpoint http://vecto.app/api/pictures $this->request->data is empty. However, when I try to access the endpoint http://vecto.app/pictures the $this->request->data is filled with the information. Does anyone know what is wrong with the following routing setup:

Router::prefix('api', function ($routes) { $routes->extensions(['json', 'xml']); $routes->resources('Users'); $routes->resources('Pictures'); // We connect the /register action so we can simply extend the CRUD Plugin add() method // and benefit of already available logic like validation and response codes instead of having to reinvent the wheel. Router::connect('/api/users/register', ['controller' => 'Users', 'action' => 'add', 'prefix' => 'api']); $routes->fallbacks('InflectedRoute'); });

最满意答案

我终于找到了解决方案,它是一个清空$ this-> request-> data数组的beforeFilter。 因此,输入数组不为空,但数据数组为空。 这是导致问题的代码:

public function beforeFilter(Event $event) { if ($this->request->is('post')) { $data = $this->request; $this->request->data = $this->request->input(function ($data) { return json_decode($data, true); }); } }

I finally found the solution which was a beforeFilter that emptied the $this->request->data array. Therefore, the input array wasn't empty but the data array was empty. This is the code that caused the problem:

public function beforeFilter(Event $event) { if ($this->request->is('post')) { $data = $this->request; $this->request->data = $this->request->input(function ($data) { return json_decode($data, true); }); } }

更多推荐

本文发布于:2023-08-06 23:10:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1456604.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:multipart   form

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!