从ZF2中通过休息请求发送的多部分数据中获取文件内容

时间:2014-07-18 10:24:58

标签: php rest http zend-framework zend-framework2

我需要使用Postman chrome扩展程序创建的POST请求检索我发送到ZF2 rest应用程序的两个文件的内容。我在邮递员的表单数据对话框中指定了两个文件,这些文件在请求中编码如下(请求预览):

...

----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="blackbox-data"; filename="blackbox-data.txt"
Content-Type: text/plain


----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="assessment-configuration"; filename="assessment-configuration.xml"
Content-Type: text/xml

...

我已经扩展了ZF2 AbstractRestfulController来处理休息请求,这很好。如何获取MyRestController::create()内发送的两个文件的文件内容?

我尝试过以下操作,但我得到的只是空数组,空字符串:

$meta = $this->request->getMetadata();
$content = $this->request->getContent();
$blackboxData = $this->request->getPost('blackbox-data');
$assessmentConfiguration = $this->request->getPost('assessment-configuration');

1 个答案:

答案 0 :(得分:2)

您必须使用$request->getFiles()。我是这样做的:

$validFiles = array();
$data = $request->getPost()->toArray();
$postFiles = $request->getFiles();

foreach ($postFiles as $key => $file) {
    if ($file['error'] == UPLOAD_ERR_NO_FILE) continue;

    $validFiles[$key] = $file;
}

if (count($validFiles)) $data['files'] = $validFiles;

现在我有一个名为$validFiles的数组,其成功上传的文件位于$data数组中(我存储了所有帖子数据)。