如何在 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)

可能是因为上传的图片不是模型,也没有路由控制器。

我可以路由上传的图像和渲染吗?

自己解决了。

我发现了以下问题。

https://github.com/stavro/arc_ecto/issues/4

或者,更详细地说,您想提供 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