Elixir/Phoenix文件上传文件夹

6

我正在尝试在网站上设置上传功能,但是我不确定存储上传文件的位置。

我按照Phoenix指南,在我的Endpoint文件中添加了plug Plug.Static, at: "/files", from: "/media", gzip: false,并在项目根目录下创建了/media文件夹。但是一直收到错误提示:no route found for GET /files/3-news.jpg (Kz.Router)

我不确定我做错了什么,也许/media文件夹的位置不正确?我将它放在根目录下,与其他文件夹(如web、priv、test等)放在一起。这是正确的位置吗?还是路径必须是完整的操作系统路径,比如/Users/Jack/Desktop/myApp/media/

谢谢大家提前的帮助和任何建议!

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

2个回答

9
刚刚想通了,我的错误在于将 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 之前!然后你就可以访问你所需的所有文件。


0

我们也可以将路径放在控制器中,并将其复制到任何路径

path_upload = upload["docfile"]

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

请注意在不同网站上链接自己的内容时要小心,您不想成为 垃圾邮件发送者。您应该在这里包含大部分内容,并仅将链接用作参考。 - Dharman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接