我有一个项目显示页面,可以正确显示文字:
<p><%= @post.body %></p>
<%= @post.title %></h1>
我想显示用户上传的图片。
我试过了:
<img src="<%= @post.project_pic %>"/>
返回:
protocol Phoenix.HTML.Safe not implemented for %{file_name: "pexels-photo-144322 (1).jpeg", updated_at: #Ecto.DateTime<2017-08-06 14:05:26>}
这显示我已经上传并存储在数据库中。
我添加了检查:
<img src="<%= inspect @post.project_pic %>"/>
根据这个答案:
protocol Phoenix.HTML.Safe not implemented Elixir Phoenix
通过编译器,但只显示损坏的图像图标。
图片是如何存储的?
我在post.ex中有这个:
field :project_pic, Citybuilder.ProjectPic.Type
在story.ex我有:
|> cast_attachments(attrs, [:project_pic])
在最新的迁移文件中,它存储为字符串:
add :project_pic, :string
也许这就是错误。
我不确定错误是在我的eex语法中,还是在文件结构的更深处。
答案 0 :(得分:3)
arc_ecto
在附件模块中定义了url
功能,您可以调用该功能获取上传的完整网址,然后在src
中将其用作<img>
} 标签。第一个参数是附件值和整个模型的元组,第二个参数是图像大小(:original
是原始的全尺寸图像)。以下内容应为您嵌入原始的完整尺寸图像:
<img src="<%= Citybuilder.ProjectPic.url({@post.project_pic, @post}, :original) %>"/>
查看documentation of arc_ecto了解更多信息。