Add Uploads.

This commit is contained in:
Roger Braun 2017-03-29 01:39:01 +02:00
parent d2cdcc097b
commit 08fdbd6f3a
5 changed files with 48 additions and 0 deletions

View File

@ -9,6 +9,9 @@ use Mix.Config
config :pleroma, config :pleroma,
ecto_repos: [Pleroma.Repo] ecto_repos: [Pleroma.Repo]
config :pleroma, Pleroma.Upload,
uploads: "uploads"
# Configures the endpoint # Configures the endpoint
config :pleroma, Pleroma.Web.Endpoint, config :pleroma, Pleroma.Web.Endpoint,
url: [host: "localhost"], url: [host: "localhost"],

View File

@ -9,6 +9,9 @@ config :pleroma, Pleroma.Web.Endpoint,
# Print only warnings and errors during test # Print only warnings and errors during test
config :logger, level: :warn config :logger, level: :warn
config :pleroma, Pleroma.Upload,
uploads: "test/uploads"
# Configure your database # Configure your database
config :pleroma, Pleroma.Repo, config :pleroma, Pleroma.Repo,
adapter: Ecto.Adapters.Postgres, adapter: Ecto.Adapters.Postgres,

30
lib/pleroma/upload.ex Normal file
View File

@ -0,0 +1,30 @@
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

BIN
test/fixtures/image.jpg vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 KiB

12
test/upload_test.exs Normal file
View File

@ -0,0 +1,12 @@
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