2016-04-29 10 views
4

私はarcarc_ectoを使用して、userモデルのアバターをアップロードしています。開発中に私はローカルストレージを使いたいと思います。アップロードは機能しますが、実際に画像を表示する方法はわかりません。円ローカルストレージ内の画像のURL

私はファイル名を表示できますが、<img>タグでローカルストレージが使用するURLは取得できません。ビューでアクセスするには、別のディレクトリを設定または別の方法で使用する必要がありますか?

ウェブ/テンプレート/ユーザー/ 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 

答えて

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 

次に、あなたは、通常のビューのfuncs

としてテンプレートでそれを使用することができます