通过rest API显示图像的正确方法

时间:2014-07-15 12:11:35

标签: symfony

我目前正在尝试通过rest API显示个人资料图片。 我得到了它的工作,但我觉得这不是正确的方法。

所以,在API中我有一个控制器:

public function getUserprofilepicAction(Request $request) {
    /**
    * Handle stuff
    */

    $file = $user->getWebPath();
    $type = 'image/jpeg';
    header('Content-Type:'.$type);
    header('Content-Length: ' . filesize($file));
    readfile($file);
}

现在API调用是这样的:

<somesite>/api/user/userprofilepic.json?userId=84

为了在网页上查看图片:

<img src = <somesite>/app_dev.php/api/user/userprofilepic.json?userId=84>

所以现在我想知道,在symfony2中通过restAPI发送/查看图片的最佳做法究竟是什么?

-Cheers

1 个答案:

答案 0 :(得分:0)

你在控制器中正确地做到了。

  1. 获取图片
  2. 获取类型(以及其他信息,如长度) - 总是为你jpeg?
  3. 设置HTTP标头(内容类型和其他)
  4. 返回二进制数据(文件内容)
  5. 还有其他方法可以实现这一目标:

    • 通过base64编码的字符串:如果要返回字符串而不是二进制数据,可以将图像编码为base64字符串,然后通过网络发送。问题是响应的大小。 base64编码的字符串比二进制数据大33%。

    • 通过网络路径:如果您想避免阅读图片,请每次发送二进制文件,您只需返回图片的网址(例如http://example.com/u/img.jpeg)并让客户端执行请求。这样,您就不会在操作背后有任何业务逻辑。每当有人想要个人资料图片时,他只需要查询图片的网址。对于此解决方案,您需要在公共目录中上传图片,例如web/uploads/pics/

    PS:如果您想遵循REST的想法,我会为路由做<somesite>/api/user/84/profilepicture之类的事情。