我正在使用
arc和
arc_ecto上传用户模型的头像.在开发过程中,我想使用本地存储.上传有效,但我不知道如何实际显示图像.
我可以显示文件名但是没有获取本地存储的URL以在< img>中使用它.标签.我是否必须在配置中使用不同的目录或以不同的方式在视图中访问它?
网页/模板/用户/ show.html.eex
<h2>Show user</h2>
[...]
<%= MyApp.Avatar.url({@user.avatar, @user}, :original) %>
网站/上传/ avatar.ex
defmodule MyApp.Avatar do
use Arc.Definition
use Arc.Ecto.Definition
@versions [:original, :thumb]
def transform(:thumb, _) do
{:convert, "-strip -thumbnail 100x100^ -gravity center -extent 100x100"}
end
def __storage, do: Arc.Storage.Local
def filename(version, {file, scope}), do: "#{version}-#{file.file_name}"
# Override the storage directory:
def storage_dir(version, {file, scope}) do
"web/static/assets/images/avatars/#{scope.id}"
end
end
最佳答案 像图片这样的静态资产是在priv / static /下运行的.我在我的应用程序中使用特殊帮助函数进行弧上传.
这是代码:
# helper
defmodule MyApp.AssetHelper do
def upload_path(path) do
case is_binary(path) do
true ->
path
|> String.replace("priv/static/", "/")
_ ->
nil
end
end
end
# web/web.ex
def view do
quote do
....
import MyApp.AssetHelper, only: [upload_path: 1]
....
import MyApp.Router.Helpers
import MyApp.ErrorHelpers
import MyApp.Gettext
end
end
# view
defmodule MyApp.AvatarView do
use MyApp.Web, :view
def avatar_path(avatar) do
MyApp.Avatar.url({avatar.image, avatar}, :thumb)
|> upload_path
end
end
然后你可以在模板中使用它作为普通的视图功能