有没有办法在渲染页面中显示用户发送的图像?
我已阅读有关文件上传的this page,但将其发回用户的唯一方法是使用send_file/5
,这似乎不适合在网页中呈现图片。我在考虑将文件移动到$username = $_GET['username'] ?? $_POST['username'] ?? 'sun';
$password = $_GET['password'] ?? $_POST['password'] ?? 'live';
文件夹,但我觉得这不属于它所属的位置。
我来自Django世界,静态文件和上传内容之间存在分离,我很想知道凤凰城有类似的概念。
简而言之,我如何渲染用户上传的图像?
答案 0 :(得分:2)
这里有两种选择。您可以直接在视图中使用内嵌数据uri(https://en.wikipedia.org/wiki/Data_URI_scheme)。这会使您的图像尺寸膨胀很多,并且最适用于小型图像,其中额外往返服务器的成本高于发送33%的通胀增加的成本。您也没有任何缓存优势,重复使用图像将导致多个副本。
更好的选择是在控制器中创建新的路线和动作以显示图像。您需要为特定图像类型(例如content-type
)发出正确的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。