当前位置: 首页 > 知识库问答 >
问题:

解析多部分/表单数据CakePHP3

夏祯
2023-03-14

我目前正在尝试解析我通过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')时,我得到一个空数组,所以我假设数据的格式不正确(只是一个字符串)。在我写我自己的算法之前,我想确定我没有用这个算法重新发明轮子。我做错什么了?或者,如果没有,是否存在一些CakePHP3函数来处理这个问题?

更新
我发现了代码中的错误,路由过程似乎以某种方式将post数组清空到早期。当我尝试使用以下endpoint的Postman http://vecto.app/api/picture$this->request->data为空。但是,当我尝试访问endpointhttp://vecto.app/pictures时,$this->request->data将填充这些信息。有人知道以下路由设置有什么问题吗:

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');
 });

共有1个答案

爱博达
2023-03-14

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

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); 
        }); 
    } 
}
 类似资料:
  • 我正在使用请求库编写Web服务客户端。我正在获取包含文件和文本json的多部分/表单数据。我不知道如何解析它。是否有合适的库来解析python中的多部分/表单数据格式,或者我应该自己编写解析器? 我的代码: b'\r\n--c00750d1-8ce4-4d29-8390-b50bf02a92cc\r\nContent-Displace: form-data; name="playback Hash

  • 问题内容: 我正在使用请求库编写Web Service客户端。我正在包含文件和text-json的multipart / form- data中获取数据。我不知道如何解析它。是否有合适的库可以解析python中的multipart / form-data格式,还是我应该自己编写解析器? 我的代码: b’\ r \ n–c00750d1-8ce4-4d29-8390-b50bf02a92cc \ r

  • 我正在使用带有Content-Type: Application/dicom的WADO-RS。成功执行请求后,我得到了一个字节流,其中包含一些头信息和Multipart格式的DICOM数据。如何使用C代码从中解析实际的DICOM数据?

  • 通常,我需要通过JSOUP将数据以响应multipart/form-data的形式发送到站点 作为一个示例,使用一个简单的窗体来sgeniriruet您的查询。 <表单操作=«localhost:8000»方法=«post»enctype=»多部分/表单数据» <输入类型=»文本»名称=»文本»值=»文本默认值» <输入类型=»文件»名称=»文件1» <输入类型=»文件»名称=»文件2» 提交 通

  • 问题内容: 我正在编写一个RESTful API。我在使用不同的动词上载图像时遇到麻烦。 考虑: 我有一个对象,可以通过对URL的发布/放置/删除/获取请求来创建/修改/删除/查看。如果有要上载的文件,则请求是多部分形式;如果只有文本要处理,则请求是application / xml。 为了处理与对象相关的图像上传,我正在做类似的事情: 这里的主要问题是在尝试处理放置请求时,显然$ _POST不包

  • 问题内容: 我正在尝试通过带有POST请求的照片上传 根据自述文件,我应该能够做到这一点 问题是,这不起作用。我收到测试服务器的回复,说它转储了0个post变量。 我已经确认该HTML小页面服务器处于工作状态 所以问题是,请求模块在做什么?有没有更好的方法来发送节点? 问题答案: 经过更多研究后,我决定使用。这使得分段上传非常容易。