Elixir Phoenix Page重新加载图像上传后

时间:2017-06-12 03:49:26

标签: elixir phoenix-framework

参与我的第一个凤凰城项目。作为其中的一部分,我已经为降价文本编辑字段(类似于SO / GitHub)创建了拖放文件上传。当文件被放入字段时,我正在执行异步控制器操作以保存文件到文件系统。

这是处理异步文件上传的控制器操作:

def create_photo(conn, %{"images" => upload}) do
  if uploaded_file = upload do
    File.cp(uploaded_file.path, Application.app_dir(:my_app, "/priv/static/images/#{uploaded_file.filename}"))
  end
  render(conn, "upload.json", path: "/images/#{uploaded_file.filename}")
end

我一直在努力弄清楚当这个动作触发时页面重新加载的原因。我认为这是客户端我做错了,但我只是想通过热重新加载功能每次刷新页面:

# Watch static and templates for browser reloading.
config :my_app, MayApp.Endpoint,
  live_reload: [
    patterns: [
      ~r{priv/static/.*(js|css|png|jpeg|jpg|gif|svg)$},
      ...

由于应用程序配置为在priv/static/images更改时重新加载,因此会产生错误,即我上传文件时会提交表单并刷新页面。

我选择了一个存放上传文件的好地方吗?我选择了这个静态路径,因为我可以在降价文本字段中引用图像。

1 个答案:

答案 0 :(得分:1)

你最后的假设是正确的。 priv / static适用于不会更改的资产,因此也就是名称。

我建议您将文件移至/ uploads / images,然后将以下内容添加到您的终端,以便Phoenix为其提供服务。

plug Plug.Static, at: "/uploads", from: Path.expand('./uploads'), gzip: (Mix.env == :prod)

但是,如果您坚持使用/ priv目录,那么您可以随时从上传中删除图像格式。

# Watch static and templates for browser reloading.
config :my_app, MayApp.Endpoint,
  live_reload: [
    patterns: [
      ~r{priv/static/.*(js|css|svg)$},