参与我的第一个凤凰城项目。作为其中的一部分,我已经为降价文本编辑字段(类似于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
更改时重新加载,因此会产生错误,即我上传文件时会提交表单并刷新页面。
我选择了一个存放上传文件的好地方吗?我选择了这个静态路径,因为我可以在降价文本字段中引用图像。
答案 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)$},