我使用arc和arc_ecto上传user
模型的头像。在开发过程中,我想使用本地存储。上传有效,但我不知道如何实际显示图片。
我可以显示文件名,但不能获取本地存储的网址,以便在<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
答案 0 :(得分:2)
图片等静态资源在priv/static/
下有效。我在我的应用中使用arc
上传的特殊助手功能。
这是代码:
# 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
然后你可以在模板中使用它作为普通视图功能