postland/lib/postland/uploads.ex
2024-10-26 16:51:05 -05:00

27 lines
664 B
Elixir

defmodule Postland.Uploads do
use Phoenix.VerifiedRoutes,
endpoint: PostlandWeb.Endpoint,
router: PostlandWeb.Router,
statics: ["uploads"]
def upload_path() do
Application.get_env(:postland, :upload_path)
end
def handle_upload(%{client_type: mime_type, uuid: uuid}, %{path: path} = meta) do
extension = extension_from_mime(mime_type)
dest = Path.join(upload_path(), "#{uuid}#{extension}")
File.cp!(path, dest)
{:ok, ~p"/uploads/#{Path.basename(dest)}"}
end
def extension_from_mime(mime_type) do
case MIME.extensions(mime_type) do
[] ->
""
[ext | _rest] ->
".#{ext}"
end
end
end