有没有办法将上传的文件返回给用户?
Is there a way to serve uploaded files back to the user?
有没有办法在渲染页面中显示用户发送的图片?
我读过 this page about file uploads, but the only way to send it back the user is using send_file/5
,它似乎不适合在网页中呈现图像。我正在考虑将文件移动到 assets/static
文件夹,但我觉得这不是它所属的位置。
我来自 Django 世界,静态文件和上传内容之间存在分离,我想知道 phoenix 中也有类似的概念。
简而言之,如何渲染用户上传的图片?
这里有两个选项。您可以对图像进行 base64,并直接在您的视图中使用内联数据 uri (https://en.wikipedia.org/wiki/Data_URI_scheme)。这会使您的图像大小增加很多,并且仅适用于小图像,其中额外 round-trip 到服务器的成本高于发送 33% 增加的 inflation 大小的成本。您也完全没有缓存优势,重复使用图像会产生多个副本。
更好的选择是在您的控制器中创建一个新的路线和动作来显示图像。您需要为您的特定图像类型(例如 image/png
)发出适当的 content-type
header,然后您应该使用 send_file/5
。您可以将 <img>
标记与图像的路径一起用作 src
属性。您在这里获得了巨大的优势,并且可以根据自己的喜好调整所有缓存。
还有一些其他选项,例如 nginx 的 X-Accel 功能 (https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/),您可以在其中发出该文档中给出的 headers,nginx 将发送文件适当地。您仍然需要一条专用路由,并且您将从路由 URL.
发出 headers
我不会太担心开销。 erlang VM 非常擅长管理 IO。
有没有办法在渲染页面中显示用户发送的图片?
我读过 this page about file uploads, but the only way to send it back the user is using send_file/5
,它似乎不适合在网页中呈现图像。我正在考虑将文件移动到 assets/static
文件夹,但我觉得这不是它所属的位置。
我来自 Django 世界,静态文件和上传内容之间存在分离,我想知道 phoenix 中也有类似的概念。
简而言之,如何渲染用户上传的图片?
这里有两个选项。您可以对图像进行 base64,并直接在您的视图中使用内联数据 uri (https://en.wikipedia.org/wiki/Data_URI_scheme)。这会使您的图像大小增加很多,并且仅适用于小图像,其中额外 round-trip 到服务器的成本高于发送 33% 增加的 inflation 大小的成本。您也完全没有缓存优势,重复使用图像会产生多个副本。
更好的选择是在您的控制器中创建一个新的路线和动作来显示图像。您需要为您的特定图像类型(例如 image/png
)发出适当的 content-type
header,然后您应该使用 send_file/5
。您可以将 <img>
标记与图像的路径一起用作 src
属性。您在这里获得了巨大的优势,并且可以根据自己的喜好调整所有缓存。
还有一些其他选项,例如 nginx 的 X-Accel 功能 (https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/),您可以在其中发出该文档中给出的 headers,nginx 将发送文件适当地。您仍然需要一条专用路由,并且您将从路由 URL.
发出 headers我不会太担心开销。 erlang VM 非常擅长管理 IO。