Commit 08fdbd6f authored by lain's avatar lain
Browse files

Add Uploads.

parent d2cdcc09
......@@ -9,6 +9,9 @@
config :pleroma,
ecto_repos: [Pleroma.Repo]
config :pleroma, Pleroma.Upload,
uploads: "uploads"
# Configures the endpoint
config :pleroma, Pleroma.Web.Endpoint,
url: [host: "localhost"],
......
......@@ -9,6 +9,9 @@
# Print only warnings and errors during test
config :logger, level: :warn
config :pleroma, Pleroma.Upload,
uploads: "test/uploads"
# Configure your database
config :pleroma, Pleroma.Repo,
adapter: Ecto.Adapters.Postgres,
......
defmodule Pleroma.Upload do
def store(%Plug.Upload{} = file) do
uuid = Ecto.UUID.generate
upload_folder = Path.join(upload_path(), uuid)
File.mkdir_p!(upload_folder)
result_file = Path.join(upload_folder, file.filename)
File.cp!(file.path, result_file)
%{
"type" => "Image",
"href" => url_for(Path.join(uuid, file.filename)),
"name" => file.filename,
"uuid" => uuid
}
end
defp upload_path do
Application.get_env(:pleroma, Pleroma.Upload)
|> Keyword.fetch!(:uploads)
end
defp url_for(file) do
host =
Application.get_env(:pleroma, Pleroma.Web.Endpoint)
|> Keyword.fetch!(:url)
|> Keyword.fetch!(:host)
"https://#{host}/media/#{file}"
end
end
defmodule Pleroma.UploadTest do
alias Pleroma.Upload
use Pleroma.DataCase
describe "Storing a file" do
test "copies the file to the configured folder" do
file = %Plug.Upload{content_type: "image/jpg", path: Path.absname("test/fixtures/image.jpg"), filename: "an_image.jpg"}
data = Upload.store(file)
assert data["name"] == "an_image.jpg"
end
end
end
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment