Elixir/Phoenix 文件上传文件夹

Elixir/Phoenix file upload folder

所以我正在尝试在网站上设置上传功能。但是,我正在为保存上传文件的位置而苦恼。

我遵循了 phoenix 指南,将 plug Plug.Static, at: "/files", from: "/media", gzip: false 添加到我的 Endpoint 文件中,并在项目的根目录中创建了 /media 文件夹。但不断收到错误消息:no route found for GET /files/3-news.jpg (Kz.Router) .

我不确定我做错了什么,也许 /media 文件夹的位置不正确?我已经把它放到根目录下了,其他文件夹在哪,比如web, priv, test等等。这个位置对吗?或者路径必须是完整的 OS 路径,例如 /Users/Jack/Desktop/myApp/media/ ?

在此先感谢大家,感谢任何建议!

P.S。我可以使用 File.cp(upload.path, "media/#{file_name}") 上传文件,它们出现在 /media 中,但仍然无法通过 http://localhost:4000/files/4-news.jpg

访问它们

刚刚弄明白了。我的错误是将 plug Plug.Static, at: "/files", from: "media/" 放在 Endpoint 文件的底部,但它应该放在现有的 Plug.Static 下,像这样:

plug Plug.Static,
at: "/", from: :myApp, gzip: false,
only: ~w(css fonts images js favicon.ico robots.txt)

plug Plug.Static, at: "/files", from: "media/"

或至少在 plug myApp.Router 之前!然后你就可以访问你需要的所有文件了。

我们也可以把路径放在controller里面,然后复制到任意路径

path_upload = upload["docfile"]

IO.inspect path_upload.filename, label: "Photo upload information"
File.cp(path_upload.path, Path.absname("uploads/#{path_upload.filename}"))