【问题标题】:Catch and upload files from POST call从 POST 调用中捕获和上传文件
【发布时间】:2015-05-29 04:06:26
【问题描述】:

我正在使用 REST Api 并正在发送(上传)POST 中的文件。我正在使用 Symfony 2.6.8 和 FOSRestBundle,我这样做是在方法上:

/**
 * Set and upload avatar for reps.
 *
 * @param ParamFetcher $paramFetcher
 * @param Request $request
 *
 * @ApiDoc(
 *      resource = true,
 *      https = true,
 *      description = "Set and upload avatar for reps.",
 *      statusCodes = {
 *          200 = "Returned when successful",
 *          400 = "Returned when errors"
 *      }
 * )
 *
 * @RequestParam(name="rid", nullable=false, strict=true, requirements="\d+", description="The ID of the representative")
 * @RequestParam(name="avatar", nullable=false, description="The avatar file")
 *
 * @return View
 */
public function postRepsAvatarAction(ParamFetcher $paramFetcher, Request $request)
{
    $view = View::create();
    $content = $request->getContent();

    print_r($content);
    $view->setData(array())->setStatusCode(200);

    return $view;
}

这就是我得到的回应:

------WebKitFormBoundary3JCHTJWwvnOcvnSv
Content-Disposition: form-data; name="_format"

json
------WebKitFormBoundary3JCHTJWwvnOcvnSv
Content-Disposition: form-data; name="rid"

1
------WebKitFormBoundary3JCHTJWwvnOcvnSv
Content-Disposition: form-data; name="avatar"; filename="carlingford.jpg"
Content-Type: image/jpeg

/* Here goes a lot of code that I suppose is image or so in base64 - below is just a example*/

���p��  
��T!1"AQa2q�#B��    R�$3b�C���%r�4S�&�5c
Ds��'ET�d6U���  ��L!1AQaq"��2����#��BR�b$3r����C%4S��s�&5DTc���?�g������F΅%v9��Ge�9�С@#B�'�y�4!p|hPW%<�8�:n��9�hI�B;�Ж�:R{�8Ћ(�m�:m�*����0��vƄ#��?'B���BQ����BGo}
;#�a#�΄U��W�x?�E��H��:��#Ռ�t�L�6C�u ��#�R����22����n�c���B�@3ƅ"��ZRN�dv΄�����Д��pB��'B]�rҥ�����Q���)P�� �R�����R9Y�I&���    =���X?�bI�u��ĮQ���!C�'dn�}��-n�s�j8  �c$����Q����$�q��� �@�J9$ryԁj�pN�9���B8+*��v�Sih�J}[�W��ґ���R�r�?��h�I�J!�P�?J��+��T���+��Q�)�m
od

如何捕获该 POST 文件并创建一个文件以通过 Symfony 上传到服务器?任何人都可以给我一些想法或示例代码吗?

EDIT1:

由于我使用的是FOSRestBundleNelmioApiDocBundle,所以我使用的是 Nelmio 沙盒模式,如下图所示:

【问题讨论】:

  • 检查$request-&gt;files
  • 您应该能够获取内容、删除标题并写入文件
  • @pcnate 这是我正在尝试做的,但我做不到,所以我需要这里有人的帮助来向我展示一些代码,我把它作为遵循的指南,真的我被困住了不知道如何前进
  • 我会写一个正则表达式来去除$content 的标题。或者这不是 print_r 的结果?
  • @pcnate 这不是全部响应,但是是的,如果我执行print_r($request-&gt;getContent()),这就是我得到的全部

标签: php symfony symfony-2.6


【解决方案1】:

我会使用正则表达式来分解您打印的内容:

$re = "/(?P<headers>.*)[\\r\\n][\\r\\n](?P<content>.*)/mis";

preg_match_all ( $re, $request->getContent(), $matches );

print_r( $matches );

您应该能够从 $matches 中获取匹配的元素并使用 file_put_contents 或等效项。

示例:https://regex101.com/r/oW6fM4/1

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    相关资源
    最近更新 更多