elixir – 有没有办法将上传的文件提供给用户?

有没有办法显示用户在渲染页面中发送的图像?

我已经阅读了有关文件上传的
this page,但将其发回给用户的唯一方法是使用
send_file/5,这似乎不适合在网页中呈现图像.我正在考虑将文件移动到assets / static文件夹,但我不觉得这是它所属的位置.

我来自Django世界,静态文件和上传内容之间存在分离,我很想知道凤凰城有类似的概念.

简而言之,我如何渲染用户上传的图像?

最佳答案 这里有两个选择.您可以base64图像并直接在视图中使用内联数据uri(
https://en.wikipedia.org/wiki/Data_URI_scheme).这会使您的图像尺寸膨胀很多,并且最适用于小型图像,其中额外往返服务器的成本高于发送33%的通胀增加的成本.您也没有任何缓存优势,重复使用图像将导致多个副本.

更好的选择是在控制器中创建新的路径和操作以显示图像.您需要为特定图像类型(例如image / png)发出适当的内容类型标题,然后您应该使用send_file / 5.你会使用< img>标记为图像的路由作为src属性.你在这里获得了巨大的优势,并且可以将所有缓存调整到你心中的喜悦.

还有一些其他选项,例如nginx的X-Accel功能(https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/),您可以在其中发出该文档中给出的标头,nginx将适当地发送文件.您仍然需要专用路由,并且您将从该路由URL发出标头.

我不会太担心开销. erlang VM非常擅长管理IO.

点赞