【发布时间】:2016-06-18 17:28:22
【问题描述】:
我目前正在尝试解析我通过 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 数组清空到早期。当我尝试使用以下端点 http://vecto.app/api/pictures $this->request->data 为空的 Postman 时。但是,当我尝试访问端点 http://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');
});
【问题讨论】:
-
即使 CakePHP 不提供访问表单数据的方法(it does),当 PHP 已经这样做并通过
$_POST和$_FILES? -
$this->request->data 在我通过 Postman 尝试时为空($this->request->is('post') 实际上输出 true)。 $_POST 和 $_FILES 也是空的。我假设我做错了什么,但奇怪的是 $this->request->input() 实际上包含上面的 sn-p。
-
这应该让你怀疑。您的请求很可能无效/格式错误。
-
我已经在stackoverflow.com/questions/35780665/… 上发布了一些相关信息。截图的答案是我在 Postman 中输入的内容。我看不出有什么问题。
-
启用调试,检查你的日志。对于正确有效的请求,默认情况下您将无法看到原始请求数据,而不是多部分请求 (php.net/manual/en/wrappers.php.php#wrappers.php.input)。正如我所说,您的请求很可能是无效的,例如超出允许的
post_max_size,或者甚至可能禁用enable_post_data_reading。
标签: rest cakephp-3.0 multipartform-data