SuperAPI AI 工具集

phoenix-uploads

编程与开发

查看项目

更新于 10-15 22:16

技能介绍

用途:在实现任何 Phoenix 文件上传功能之前使用的技能,覆盖手动上传、上传配置、文件落盘与静态服务配置,强调实现前先遵循既定规则。

主要能力与规则: 使用手动上传(不使用 auto_upload: true)配合表单提交模式;始终把上传目录加入 static_paths(),否则文件无法访问;处理上传错误,在模板中展示 error_to_string/1 输出;在服务端校验文件类型,不信任客户端 MIME 类型;修改 static_paths() 后需重启服务器才生效。

使用方式(实现流程):先把上传目录加入 static_paths() 并重启服务器;在 mount/3 中用 allow_upload/3 配置接受类型、条目上限与文件大小;实现 handle_event("validate", ...) 触发变更跟踪;实现 handle_event("save", ...) 消费条目、创建目录并复制文件;在模板中加入上传表单、拖放目标、预览与错误展示;最后验证目录存在、文件已保存且 URL 可解析。

必要配置示例:allow_upload(:upload_name, accept: ~w(.jpg .jpeg .png .pdf), max_entries: 10, max_file_size: 10_000_000);endpoint.ex 中 static_paths 需包含 uploads,如 ~w(assets fonts images favicon.ico robots.txt uploads)。保存时可用 Ecto.UUID.generate() 加扩展名生成安全文件名,避免保留客户端原始文件名。

适用场景:Phoenix LiveView 表单中的图片、文档等文件上传与静态文件服务。

限制与常见陷阱:不要用 auto_upload: true 配合表单提交;不要遗漏 static_paths();不要期望 static_paths() 热重载;不要信任客户端 MIME 类型;不要保留原始文件名;不要静默吞掉上传错误;不要跳过 validate 处理器。

配套技能包括 phoenix-liveview-essentials、security-essentials、testing-essentials,分别涉及 LiveView 生命周期与表单绑定、用户文件的安全校验与提供、以及用 Phoenix.LiveViewTest 测试上传。资料未提供收费、价格或平台支持等信息。