如何在 Phoenix 框架模板中渲染 arc_ecto 图片?
How to render arc_ecto image in Phoenix framework template?
我在模板中写了下面的代码。
<img src="<%= EdgeEc.Photo.url({@image.content, @image}, :original) %>" alt="" />
渲染如下。
<img src="uploads/large_myimagefilename.jpg.jpg?v=63615301283" alt="" />
然后,我在地址栏中输入路径 localhost:4000/uploads/large_116.jpg.jpg?v=63615301283
并得到以下错误。
no route found for GET /uploads/large_116.jpg.jpg (EdgeEc.Router)
可能是因为上传的图片不是模型,也没有路由控制器。
我可以路由上传的图像和渲染吗?
自己解决了。
我发现了以下问题。
或者,更详细地说,您想提供 static assets。我实际上发现 修改 现有的 plug
是唯一有效的方法,因此,如果您的示例中的应用程序名称是 EdgeEc:
在你的 lib/edge_ec/endpoint.ex
:
plug Plug.Static,
at: "/", from: :edge_ec,
only: ~w(css fonts images js uploads favicon.ico robots.txt)
还要确保您的 arc 文件模块定义的存储目录以 priv/static
:
开头
def storage_dir(_version, {_file, _scope}), do: "priv/static/uploads"
并为 URL 生成器写一个助手到 trim priv/static
:
def photo_url(struct) do
Photo.url({struct.image, struct})
|> Path.relative_to("priv/static")
end
我在模板中写了下面的代码。
<img src="<%= EdgeEc.Photo.url({@image.content, @image}, :original) %>" alt="" />
渲染如下。
<img src="uploads/large_myimagefilename.jpg.jpg?v=63615301283" alt="" />
然后,我在地址栏中输入路径 localhost:4000/uploads/large_116.jpg.jpg?v=63615301283
并得到以下错误。
no route found for GET /uploads/large_116.jpg.jpg (EdgeEc.Router)
可能是因为上传的图片不是模型,也没有路由控制器。
我可以路由上传的图像和渲染吗?
自己解决了。
我发现了以下问题。
或者,更详细地说,您想提供 static assets。我实际上发现 修改 现有的 plug
是唯一有效的方法,因此,如果您的示例中的应用程序名称是 EdgeEc:
在你的 lib/edge_ec/endpoint.ex
:
plug Plug.Static,
at: "/", from: :edge_ec,
only: ~w(css fonts images js uploads favicon.ico robots.txt)
还要确保您的 arc 文件模块定义的存储目录以 priv/static
:
def storage_dir(_version, {_file, _scope}), do: "priv/static/uploads"
并为 URL 生成器写一个助手到 trim priv/static
:
def photo_url(struct) do
Photo.url({struct.image, struct})
|> Path.relative_to("priv/static")
end